(PHP 5 >= 5.3.0, PHP 7, PHP 8)
A continuación se exponen unas definiciones importantes para estas reglas de resolución:
Es un identificador sin un separador de espacios de nombres, como Foo
Es un identificador con un separador de espacios de nombres, como Foo\Bar
Es un identificador con un separador de espacios de nombres que comienza con un separador de espacios de nombres, como \Foo\Bar
. namespace\Foo
también es un nombre completamente cualificado.
Los nombres se resuelven siguiendo estas reglas de resolución:
new \A\B
se resuelve con la clase A\B
. A\B\C
se importa como C
, una llamada a C\D\e()
se traduce como A\B\C\D\e()
. C\D\e()
se lleva a cabo dentro del espacio de nombres A\B
, se traduce como A\B\C\D\e()
. A\B\C
se importa como C, new C()
se traduce como new A\B\C()
. foo()
: A\B\foo()
. foo()
. A\B
), las llamadas a nombres de clases no cualificados o cualificados (no los completamente cualificados) se resuelven durante la ejecución. Así se resuelve una llamada a new C()
o a new D\E()
. Para new C()
: A\B\C
. A\B\C
. new D\E()
: A\B\D\E
. A\B\D\E
. new \C()
. Ejemplo #1 Las resoluciones de nombres ilustradas
<?php
namespace A;
use B\D, C\E as F;
// llamadas a funciones
foo(); // primero se intenta llamar a "foo" definida en el espacio de nombres "A"