PHP :: Операции с именами в пространстве имен
В PHP имеется возможность импорта имен из других пространств в текущее пространство имен. Делается это при помощи уже знакомого нам служебного слова use, которое должно быть указано внутри объявления пространства имен и не может быть заключено в блок (например, нельзя использовать его внутри тела функции). Это вызвано тем, что импорт выполняется во время компиляции, а не во время исполнения. Кроме того, одновременно с импортированием имеется возможность использования псевдонимов имен, которые создаются при помощи служебного слова as и позволяют сократить запись длинных имен (см. пример №1).
<?php //Объявили пространство имен namespace name_space_1{ //Объявляем константу в текущем пространстве имен const current_const_1 = 'current_constant_1'; //Объявляем функцию в текущем пространстве имен function current_function_1(){ echo 'current_function_1'.'<br>'; } //Объявляем класс в текущем пространстве имен class current_class_1{ static function current_method_1(){ echo 'current_method_1'.'<br>'; } } } //Объявили пространство имен namespace name_space_2{ //Импортируем имя константы из name_space_1 и создаем ей псевдоним use const name_space_1\current_const_1 as B; //Импортируем имя функции из name_space_1 и создаем ей псевдоним use function name_space_1\current_function_1 as f; //Импортируем имя класса из name_space_1 и создаем ей псевдоним //При этом писать слово class не нужно use name_space_1\current_class_1 as CL; //Импортируем имя функции из глобального пространства и создаем ей псевдоним use function \global_function as gl_f; //Выведет 'current_constant_1' echo B.'<br>'; //Выведет 'current_function_1' f(); //Создаем объект класса name_space_1\current_class_1 $a=new CL; //Выведет 'current_method_1' $a->current_method_1(); //Выведет 'global_function' gl_f(); //Объявляем константу в текущем пространстве имен const current_const_2 = 'current_constant_2'; //Объявляем функцию в текущем пространстве имен function current_function_2(){ echo 'current_function_2'.'<br>'; } //Объявляем класс в текущем пространстве имен class current_class_2{ static function current_method_2(){ echo 'current_method_2'.'<br>'; } } } namespace{ //Создаем псевдоним пространства имен для сокращения записи use name_space_2 as ns_2; //Объявляем функцию в глобальном пространстве function global_function(){ echo 'global_function'.'<br>'; } //Выведет 'current_constant_2' echo ns_2\current_const_2.'<br>'; //Выведет 'current_function_2' ns_2\current_function_2(); //Объект класса name_space_2\current_class_2 $b=new ns_2\current_class_2; //Выведет 'current_method_2' $b->current_method_2(); } ?>
Пример №1. Импорт и создание псевдонимов имен
Следует помнить, что импорт распространяется только на неполные и полные имена. Кроме того, в случае импортирования имени класса служебное слово class перед его именем писать не нужно, а вот при импортировании имен функций и констант нужно писать, соответственно, function и const.
Также отметим, что создание псевдонимов применимо и к именам пространств имен, что позволяет сократить запись, например, в случае длинного иерархического имени (см. пример №1).
Быстрый переход к другим страницам
- Доступ к элементам пространства имен в PHP
- Импорт имени в пространство имен и создание псевдонима имени в PHP
- Предисловие ко второй части учебника по PHP7
- Вернуться к оглавлению учебника