A free and open-source book on ZF3 for beginners


3.2. Пространства имен PHP

Когда вы используете классы из разных библиотек (и даже классы из разных компонентов одной библиотеки) в вашей программе, имена классов могут конфликтовать между собой. Это значит, что, имея два класса с одинаковыми именами, вы столкнетесь с ошибкой интерпретатора PHP. Если вы когда-нибудь разрабатывали сайты с Zend Framework 1, вы, возможно, помните супердлинные имена классов вроде Zend_Controller_Abstract. Длинные имена использовались для того, чтобы избежать конфликтов имен между различными компонентами. У каждого компонента был собственный префикс, например, Zend_ или My_.

Zend Framework 3 для этих целей используют такую особенность языка PHP, как пространства имен (namespaces). Они позволяют разрешить конфликты имен между компонентами кода и предоставляют вам возможность существенно сократить эти имена.

Пространство имен - это такой контейнер для группы имен. Вы можете вложить одно пространство имен в другое. Если класс не определяют пространство имен, они существуют в глобальном пространстве имен (например, глобальному пространству имен принадлежат классы Exception и DateTime).

Ниже представлен пример определения пространства имен, взятый из компонента Zend\Mvc:

<?php
namespace Zend\Mvc;

/**
 * Главный класс приложения.
 */
class Application 
{
    // ... элементы класса опущены для простоты ...
}

В Zend Framework 3, все классы принадлежат пространству имен верхнего уровня Zend. Строка 2 определяет пространство имен Mvc, которое вложено в Zend, и все классы этого компонента (включая класс Application, представленный в этом примере в строках 7-10) принадлежат этому пространству имен. Вложенные пространства имен разделяются обратным слешем. ('\').

В других частях кода, вы ссылаетесь на класс Application, используя его полностью определенное имя:

<?php
$application = new \Zend\Mvc\Application();

Обратите внимание на первый обратный слеш в имени \Zend\Mvc\Application Если имя класса начинается с обратного слеша, значит, это имя - полностью определенное. Если имя класса возможно специфицировать относительно текущего пространства имен, этот обратный слеш не используется.

Также можно использовать псевдонимы (aliases) (короткие имена классов) с помощью оператора use:

<?php
// Определяем псевдоним в начале сайта.
use Zend\Mvc\Application;

// Затем используем короткое имя класса.
$application = new Application();

Хотя псевдонимы позволяют использовать короткие имена классов, использовать их необязательно - вы точно также можете обращаться к классу по его полностью определенному имени.

Каждый PHP-файл приложения, как правило, определяет пространство имен (кроме входного файла index.php и файлов конфигурации, они обычно этого не делают). Например, главный модуль вашего сайта, Application, определяет свое собственное пространство имен с одноименным названием:

<?php
namespace Application;

class Module 
{
    // ... элементы класса опущены для простоты ...
}

Top