Leave a Comment
Новое в PHP 5.3.0: Неймспейсы (пространства имён)
Неймспейсы
Служат для разрешения проблемы коллизий имён переменных/функций/классов.
Пример1
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
<?php namespace my\name; // определяем неймспейс (до объявления ничего вставлять нельзя) class MyClass {} function myfunction() {} const MYCONST = 1; $a = new MyClass; $c = new \my\name\MyClass; // доступ через глобальное пространство имён $a = strlen('hi'); // see "Using namespaces: fallback to global // function/constant" section $d = namespace\MYCONST; // see "namespace operator and __NAMESPACE__ // constant" section $d = __NAMESPACE__ . '\MYCONST'; echo constant($d); // see "Namespaces and dynamic language features" section ?> |
Пример2. Объявление нескольких неймспесов в файле
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
<?php namespace MyProject { const CONNECT_OK = 1; class Connection { /* ... */ } function connect() { /* ... */ } } namespace AnotherProject { const CONNECT_OK = 1; class Connection { /* ... */ } function connect() { /* ... */ } } namespace { // в глобальном пространстве имён session_start(); $a = MyProject\connect(); echo MyProject\Connection::start(); } ?> |
Пример3. Импортирование неймспесов и создание алиасов
1 2 3 4 5 6 7 8 9 10 11 12 13 |
<? use My\Full\Classname as Another, My\Full\NSname; $obj = new Another; // инстанцирует объект класса My\Full\Classname NSname\subns\func(); // вызывает функцию My\Full\NSname\subns\func namespace foo { use \ArrayObject; $a = new ArrayObject(array(1)); // инстанцирует объект класса ArrayObject. // без строки "use \ArrayObject" пытался бы инстанцировать //объект класса foo\ArrayObject } ?> |
Если не указан неймспейс, то внутри неймспейса поиск имени переменной/функции сначала производится внутри текущего пространства имён.
Вводится константа __NAMESPACE__ (равна «» в глобальном пространстве имён).
Similar Posts
LEAVE A COMMENT
Для отправки комментария вам необходимо авторизоваться.