Leave a Comment
Новое в PHP 5.3.0: Неймспейсы (пространства имён)
Неймспейсы
Служат для разрешения проблемы коллизий имён переменных/функций/классов.
Пример1
<?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. Объявление нескольких неймспесов в файле
<?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. Импортирование неймспесов и создание алиасов
<?
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__ (равна «» в глобальном пространстве имён).
LEAVE A COMMENT
Для отправки комментария вам необходимо авторизоваться.