Пространства имен в 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();//Гена
?>

