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