(PHP 5 >= 5.3.0, PHP 7, PHP 8)
Para efeitos destas regras de resolução, aqui estão algumas definições importantes:
Este é um identificador sem separador de namespace, como Foo
.
Este é um identificador com separador de namespace, como Foo\Bar
.
Este é um identificador com separador de namespace que começa com um separador de namespace, como \Foo\Bar
. O namespace \Foo
também é um nome totalmente qualificado.
Este é um identificador que começa com namespace
, como namespace\Foo\Bar
.
Os nomes são resolvidos seguindo estas regras de resolução:
\A\B
será resolvido para A\B
. namespace
substituído pelo namespace atual. Se o nome ocorrer no namespace global, o prefixo namespace\
será removido. Por exemplo, namespace\A
dentro do namespace X\Y
será resolvido para X\Y\A
. O mesmo nome dentro do namespace global será resolvido para A
. A\B\C
for importado como C
, o nome C\D\E
será traduzido para A\B\C\D\E
. C\D\E
dentro do namespace A\B
, será resolvido para A\B\C\D\E
. use A\B\C;
um uso como new C()
será resolvido para o nome A\B\C()
. Da mesma forma, após a declaração use function A\B\foo;
um uso como foo()
será resolvido para o nome A\B\foo
. new C()
dentro do namespace A\B
será resolvido para o nome A\B\C
. A\B
, é assim que uma chamada para a função foo()
será resolvida: A\B\foo()
. foo()
. Exemplo #1 Resoluções de nomes ilustradas
<?php
namespace A;
use B\D, C\E as F;
// chamadas de funções
foo(); // primeiro tenta chamar "foo" definida no namespace "A"