Пространство имён (namespaces)

Пространство имён — механизм, позволяющий избежать конфликт между различными библиотеками.

Пространство имён создаётся через ключевое слово namespace.

# my_project.php
namespace MyProject;

class User {}

Теперь чтобы вызвать объект выше, надо использовать пространство имён.

$user = new \MyProject\User();

Если в двух библиотеках используется одно и тоже имя для объекта, то ошибки не будет, т.к. объекты находятся в разных пространствах имён.

// класс User из библиотеки MyProject
$user = new \MyProject\User();

// класс User из библиотеки OtherProject
$user_other = new \OtherProject\User();

Указывать пространство имён надо в самом начале файла (весь код, в том числе HTML и даже пробелы, должны быть после вызова ключевого слова namespace). Единственное выражение, которое можно использовать до создания пространства имён, это declare().

Пространство имён по умолчанию

Чтобы каждый раз не писать пространство имён, её можно определить в начале файла.

// пространство имён, которая будет использоваться в текущем файле
namespace MyProject;

// выполнится \MyProject\User();
$user = new User();

Если в текущем файле надо использовать два объекта без указания пространства имён, то для этого можно использовать ключевое слово use.

use MyProject\User as User;
use OtherProject\User as UserOther;

// выполнится \MyProject\User();
$user = new User();

// выполнится \OtherProject\User();
$user = new UserOther();

По стандарту PSR-4, пространство имён рекомендуется делать по следующей структуре \<Имя производителя>\(<Пространство имён>\)*<Название класса>, например \Symfony\Core\Request.

Также по стандарту PSR-4 структура файлов должна совпадать с пространством имён, включая регистр имени файлов. Например, для \Symfony\Core\Request структура файлов должна выглядеть как Symfony/Core/Request.php.  

Вывести текущую пространство имён можно через константу __NAMESPACE__.

Пространство имён появилось в PHP 5.3.