html.okpython.net
HTML и CSS для начинающих

PHP :: Операции с именами в пространстве имен

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

PHP Результат htmlCodes
<?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).

Быстрый переход к другим страницам