belarusweb.net
© Петр Романовский Минск, 2016-2017.



belarusweb.net

Основы создания сайтов...
PHP+MySQL >>>
                          Учебник Задачник Справочник

7.3. Импорт имени в пространство имен и создание псевдонима имени

В PHP имеется возможность импорта имен из других пространств в текущее пространство имен. Делается это при помощи уже знакомого нам служебного слова use, которое должно быть указано внутри объявления пространства имен и не может быть заключено в блок (например, нельзя использовать его внутри тела функции). Это вызвано тем, что импорт выполняется во время компиляции, а не во время исполнения. Кроме того, одновременно с импортированием имеется возможность использования псевдонимов, которые создаются при помощи служебного слова as и позволяют сократить запись длинных имен (см. пример 7.6).

<?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;
	
	echo B.'<br>'; //Выведет 'current_constant_1'
	f();           //Выведет 'current_function_1'
	$a=new CL;     //Создаем объект класса name_space_1\current_class_1
	$a->current_method_1();//Выведет 'current_method_1'
	gl_f();        //Выведет 'global_function'	
	
	//Объявляем константу в текущем пространстве имен 
	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>';
	}
	
	echo ns_2\current_const_2.'<br>'; //Выведет 'current_constant_2'
	ns_2\current_function_2();        //Выведет 'current_function_2'
	$b=new ns_2\current_class_2;      //Объект класса name_space_2\current_class_2
	$b->current_method_2();           //Выведет 'current_method_2'
}
?>

Пример 7.6. Импорт и создание псевдонимов имен

Следует помнить, что импорт распространяется только на неполные и полные имена. Кроме того, в случае импортирования имени класса служебное слово class перед его именем писать не нужно, а вот при импортировании имен функций и констант нужно писать, соответственно, function и const.

Также отметим, что создание псевдонимов применимо и к именам пространств имен, что позволяет сократить запись, например, в случае длинного иерархического имени (см. пример 7.6).

Контрольные вопросы и задания

  1. Опишите синтаксис импортирования имен в текущее пространство имен и создания их псевдонимов.

Словарь новых английских слов

namespace [neɪmˈspeɪs] – пространство имен.
declare [dɪˈklɛː] – объявлять, провозглашать.
storage [ˈstɔːrədʒ] – хранилище, склад, память.
current [ˈkʌr(ə)nt] – текущий.
Комментарии (0)
Петр Романовский
1. Приветствуются комментарии, которые содержат дополнения к материалу текущей страницы, а также ваши ответы на вопросы других пользователей.
2. Если вам что-то непонятно - спрашивайте, не забывая написать, что именно и с какого места.
Показаны все комментарии
Чтобы оставить свой комментарий, авторизуйтесь, пожалуйста!    
     
belarusweb.net © Петр Романовский, Минск, 2016-2017.
Связаться с автором
Наверх