Пример работы с namespace в php
Поддержка пользовательского пространства имен появилась в php с версии 5.3.0
Как было раньше:
Как стало:
По сути, теперь в скрипте может быть несколько классов с одинаковыми именами, но в разных пространствах имен!
Новое пространство имен может быть задано одним из двух способов
(Внимание: в обоих случаях ключевое слово namespase должно быть расположено в самом начале файла сразу после <?php )
Способ первый:
1 |
<?php namespace A { class class1 { public static function say() { echo 'Я пространство имен А<br/>'; } } } ?> |
Способ второй:
1 |
<?php namespace A; class class1 { public static function say() { echo 'Я пространство имен А'; } } ?> |
Как обратиться к классу расположенному в namespase?
Допустим, у нас есть еще один класс:
1 |
<?php namespace B { class class1 { public static function say() { echo 'Я пространство имен B<br/>'; } } } ?> |
И файлы называются A.php и B.php, в соответствии с их пространствами имен.
Тогда, после подключения файлов, к классам можно обратиться так:
1 |
<?php // Подключаем файлы require_once 'A.php'; require_once 'B.php'; // Обращаемся к классу A из пространства имен A A\class1::say(); // Обращаемся к классу A из пространства имен B B\class1::say(); // Такой способ выдаст ошибку, т.к. в глобальном пространстве имен нет класса A # class1::say(); -- Class 'A' not found in ... //Еще можно использовать зарезервированное слово USE use A\class1; // Тогда можно обращается к классам из неймспейса без его явного указания: class1::say(); // Еще можно создавать алиасы: use B AS NameSpace2; NameSpace2\class1::say(); ?> |
Для того, что бы узнать в каком пространстве имен мы сейчас находимся можно использовать константу __NAMESPACE__, стоит учитывать, что вне namespace она будет пустой.