Использование пространств имен: импорт/создание псевдонима имени
Вернуться к: Пространства имен
(PHP 5 >= 5.3.0, PHP 7)
Возможность ссылаться на внешнее абсолютное имя по псевдониму или импортирование - это важная особенность пространств имен. Это похоже на возможность файловых систем unix создавать символические ссылки на файл или директорию.
Все версии PHP, поддерживающие пространства имен, поддерживают три вида создания псевдонима имени или импорта: создание псевдонима для имени класса, создание псевдонима для имени интерфейса и для имени пространства имен. PHP 5.6+ также поддерживает импорт функций и имен констант.
В PHP создание псевдонима имени выполняется с помощью оператора use. Вот пример, показывающий 5 типов импорта:
Пример #1 импорт/создание псевдонима имени с помощью оператора use
<?php
namespace foo;
use My\Full\Classname as Another;
// это тоже самое, что и использование My\Full\NSname как NSname
use My\Full\NSname;
// импортирование глобального класса
use ArrayObject;
// импортирование функции (PHP 5.6+)
use function My\Full\functionName;
// псевдоним функции (PHP 5.6+)
use function My\Full\functionName as func;
// импортирование константы (PHP 5.6+)
use const My\Full\CONSTANT;
$obj = new namespace\Another; // создает экземпляр класса foo\Another
$obj = new Another; // создает объект класса My\Full\Classname
NSname\subns\func(); // вызывает функцию My\Full\NSname\subns\func
$a = new ArrayObject(array(1)); // создает объект класса ArrayObject
// без выражения "use ArrayObject" мы создадим объект класса foo\ArrayObject
func(); // вызывает функцию My\Full\functionName
echo CONSTANT; // выводит содержимое константы My\Full\CONSTANT
?>
PHP дополнительно поддерживает удобное сокращение для задания нескольких операторов use в одной и той же строке
Пример #2 импорт/создание псевдонима имени с помощью оператора use, комбинирование нескольких операторов use
<?php
use My\Full\Classname as Another, My\Full\NSname;
$obj = new Another; // создает объект класса My\Full\Classname
NSname\subns\func(); // вызывает функцию My\Full\NSname\subns\func
?>
Импорт выполняется во время компиляции, и не влияет на имена динамических классов, функций или констант.
Пример #3 Импорт и динамические имена
<?php
use My\Full\Classname as Another, My\Full\NSname;
$obj = new Another; // создает объект класса My\Full\Classname
$a = 'Another';
$obj = new $a; // создает объект класса Another
?>
В дополнение, импорт распространяется только на неполные и полные имена. Абсолютные имена не затрагиваются операцией импорта.
Пример #4 Импортирование и абсолютные имена
<?php
use My\Full\Classname as Another, My\Full\NSname;
$obj = new Another; // создает объект класса My\Full\Classname
$obj = new \Another; // создает объект класса Another
$obj = new Another\thing; // создает объект класса My\Full\Classname\thing
$obj = new \Another\thing; // создает объект класса Another\thing
?>
Scoping rules for importing
Ключевое слово use должно быть указано в самом начале файла (в глобальной области) или внутри объявления пространства имен. Это необходимо потому, что импорт выполняется во время компиляции, а не во время исполнения, поэтому оно не может быть заключено в блок. Следующий пример показывает недопустимое применение ключевого слова use:
Пример #5 Недопустимое правило импорта
<?php
namespace Languages;
class Greenlandic
{
use Languages\Danish;
...
}
?>
Замечание:
Правила импорта задаются на каждый файл отдельно. Это означает, что присоединяемые файлы НЕ будут наследовать правила импорта из родительского файла.
Вернуться к: Пространства имен