(PHP 5 >= 5.3.0)
Для этих правил здесь приведены несколько важных определений:
Это идентификатор без разделителя пространств имен, например, Foo
Это идентификатор с разделителем пространств имен, например, Foo\Bar
Это идентификатор с разделителем пространств имен, который начинается с разделителя пространств имен, например, \Foo\Bar. Пространство имен \Foo также является абсолютным именем.
Имена разрешаются согласно следующим правилам:
Пример #1 Примеры разрешения имен
<?php
namespace A;
use B\D, C\E as F;
// вызовы функций
foo(); // сперва пытается вызвать "foo", определенную в пространстве имен "A",
// затем вызывает глобальную функцию "foo"
\foo(); // вызывает функцию "foo", определенную в глобальном пространстве
my\foo(); // вызывает функцию "foo", определенную в пространстве "A\my"
F(); // сперва пытается вызвать "F", определенную в пространстве имен "A",
// затем вызывает глобальную функцию "F"
// ссылки на классы
new B(); // создает объект класса "B", определенного в пространстве имен "A".
// если не найден, то пытается сделать автозагрузку класса "A\B"
new D(); // используя правила импорта, создает объект класса "D", определенного в пространстве имен "B"
// если не найден, то пытается сделать автозагрузку класса "B\D"
new F(); // используя правила импорта, создает объект класса "E", определенного в пространстве имен "C"
// если не найден, то пытается сделать автозагрузку класса "C\E"
new \B(); // создает объект класса "B", определенного в глобальном пространстве,
// если не найден, то пытается сделать автозагрузку класса "B"
new \D(); // создает объект класса "D", определенного в глобальном пространстве,
// если не найден, то пытается сделать автозагрузку класса "D"
new \F(); // создает объект класса "F", определенного в глобальном пространстве,
// если не найден, то пытается сделать автозагрузку класса "F"
// статические методы/функции пространства имен из другого пространства имен
B\foo(); // вызывает функцию "foo" из пространства имен "A\B"
B::foo(); // вызывает метод "foo" из класса "B", определенного в пространстве имен "A"
// если класс "A\B" не найден, то пытается сделать автозагрузку класса "A\B"
D::foo(); // используя правила импорта, вызывает метод "foo" класса "D", определенного в пространстве имен "B"
// если класс "B\D" не найден, то пытается сделать автозагрузку класса "B\D"
\B\foo(); // вызывает функцию "foo" из пространства имен "B"
\B::foo(); // вызывает метод "foo" класса "B" из глобального пространства
// если класс "B" не найден, то пытается сделать автозагрузку класса "B"
// статические методы/функции пространства имен из текущего пространства имен
A\B::foo(); // вызывает метод "foo" класса "B" из пространства имен "A\A"
// если класс "A\A\B" не найден, то пытается сделать автозагрузку класса "A\A\B"
\A\B::foo(); // вызывает метод "foo" класса "B" из пространства имен "A"
// если класс "A\B" не найден, то пытается сделать автозагрузку класса "A\B"
?>