Пространства имен в PHP
Пространство имён (namespace) - предназначено для разделения кода в больших проектах для того, чтобы не допустить путаницы, одинаковых названий классов, функций и констант, обращение к которым происходит через уникальные имена пространства имен.
Так Вы сможете смело подключать сторонние библиотеки и не бояться, что там будут такие же имена, как и в вашем коде, которые могут привести к фатальным ошибкам.
Пример:
<?php namespace dir\gena\f; class Gena { function __construct() { echo "Гена<br />\n"; } } namespace dir\ivan\f; class Gena { function __construct() { echo "Иван<br />\n"; } } new \dir\gena\f\Gena();//Гена new \dir\ivan\f\Gena();//Иван new Gena();//Иван use \dir\gena\f;//Импортируем пространство имен new f\Gena();//Гена use \dir\gena\f AS g;//Импортируем пространство имен КАК псевдоним new g\Gena();//Гена namespace dir\ivan\f; new Gena();//Иван ?>
На практике каждый класс переносят на отдельный файл.php, потом "инклюдят" в основной код. Имя класса принято указывать с большой буквы.
<?php require_once("Gena.php"); $oG=new Gena();//Ошибка: класс не найден $oG=new \dir\gena\f\Gena();//Всё работает - указали в начале namespace dir\gena\f; ?>
Импортируем пространства имен - use
<?php require_once("Gena.php"); use dir\gena\f;//Импортируем пространство имен new f\Gena();//Гена ?>
или так...
<?php require_once("Gena.php"); use dir\gena\f\Gena;//Импортируем пространство имен new Gena();//Гена ?>
или так...
<?php require_once("Gena.php"); use dir\gena;//Импортируем пространство имен new gena\f\Gena();//Гена ?>