(PHP 5 >= 5.3.0)
Antes de hablar del uso de los espacios de nombres es importante entender cómo sabe PHP qué elemento del código del espacio de nombre se requiere. Se puede hacer una simple analogía entre los espacios de nombres de PHP y el sistema de archivos. Existen tres maneras de acceder a un archivo en el sistema de archivos:
Aquí hay un ejemplo de los tres tipos de sintaxis en código real:
archivo1.php
<?php
namespace Foo\Bar\subespaciodenombres;
const FOO = 1;
function foo() {}
class foo
{
static function métodoestático() {}
}
?>
archivo2.php
<?php
namespace Foo\Bar;
include 'archivo1.php';
const FOO = 2;
function foo() {}
class foo
{
static function métodoestático() {}
}
/* Nombre no cualificado */
foo(); // se resuelve con la función Foo\Bar\foo
foo::métodoestático(); // se resuelve con la clase Foo\Bar\foo, método métodoestático
echo FOO; // se resuelve con la constante Foo\Bar\FOO
/* Nombre cualificado */
subespaciodenombres\foo(); // se resuelve con la función Foo\Bar\subespaciodenombres\foo
subespaciodenombres\foo::métodoestático(); // se resuelve con la clase Foo\Bar\subespaciodenombres\foo,
// método métodoestático
echo subespaciodenombres\FOO; // se resuelve con la constante Foo\Bar\subespaciodenombres\FOO
/* Nombre conmpletamente cualificado */
\Foo\Bar\foo(); // se resuelve con la función Foo\Bar\foo
\Foo\Bar\foo::métodoestático(); // se resuelve con la clase Foo\Bar\foo, método métodoestático
echo \Foo\Bar\FOO; // se resuelve con la constante Foo\Bar\FOO
?>
Observe que para acceder a cualquier clase, función o constante globales, se puede usar un nombre completamente cualificado, como \strlen() o \Exception o \INI_ALL.
Ejemplo #1 Acceder a clases, funciones y constantes globales desde un espacio de nombres
<?php
namespace Foo;
function strlen() {}
const INI_ALL = 3;
class Exception {}
$a = \strlen('hola'); // llama a la función global strlen
$b = \INI_ALL; // accede a la constante global INI_ALL
$c = new \Exception('error'); // instancia a la clase global Exception
?>