namespace
Когда количество файлов вашего PHP проекта увеличивается, увеличивается вероятность того, что у вас может быть два разные класса или функции, названные одинаково. Особенно, если если вы используете сторонние библиотеки.
Задав в начале файла namespace Tester;
namespace позволяет решить эту проблему совпадения имен.
Директива namespace должна быть в самом начале файла.
До тега
Имя класса PHP всегда ищет только в текущем пространстве имён.
Константы и функции PHP будет искать в начале в текущем пространстве имен, если не найдёт, то в глобальном.
На переменные namespace не распространяется, а жаль.
Для примера создадим два файла, в b.php задаём namespace область и дальнейшее описание классов будет принадлежать только к этой области.
Файл b.php
<?php
namespace Tester;
$s='Переменная из namespace Tester';
const TEST_CONST = 'Константа из namespace Tester';
class Test
{
function __construct() {
echo __METHOD__.'<br>';
}
public static function staticFunc() {
echo __METHOD__.'<br>';
}
}
Файл a.php
<?php
namespace Tester;
echo 'namespace: ', __NAMESPACE__, '<br>'; // выводит namespace: "Tester"
require 'b.php';
echo $s.'<br>';
echo TEST_CONST.'<br>';
Test::staticFunc();
$v = new Test();