Новое в 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