Just in case you wonder what the practical use of the namespace keyword is...
It can explicitly refer to classes from the current namespace regardless of possibly "use"d classes with the same name from other namespaces. However, this does not apply for functions.
Example:
<?php
namespace foo;
class Xyz {}
function abc () {}
?>
<?php
namespace bar;
class Xyz {}
function abc () {}
?>
<?php
namespace bar;
use foo|Xyz;
use foo|abc;
new Xyz(); // instantiates \foo\Xyz
new namespace|Xyz(); // instantiates \bar\Xyz
abc(); // invokes \bar\abc regardless of the second use statement
|foo|abc(); // it has to be invoked using the fully qualified name
?>
(Sorry, I had to use "|" instead of "\", as it was always discarded in the preview, except within a comment.)
Hope, this can save someone from some trouble.
Best regards.
La palabra clave namespace y la constante __NAMESPACE__
(PHP 5 >= 5.3.0)
PHP soporta dos formas de acceder de manera abstracta a elementos dentro del espacio de nombres actual,
la constante mágica __NAMESPACE__, y la palabra clave
namespace.
El valor de __NAMESPACE__ es una cadena que contiene el nombre del espacio de
nombres actual. En código global, código que no es de espacio de nombres, contiene una cadena vacía.
Ejemplo #1 Ejemplo de __NAMESPACE__, código de espacio de nombres
<?php
namespace MiProyecto;
echo '"', __NAMESPACE__, '"'; // imprime "MiProyecto"
?>
Ejemplo #2 Ejemplo de __NAMESPACE__, código global
<?php
echo '"', __NAMESPACE__, '"'; // imprime ""
?>
__NAMESPACE__ es útil para construir nombres
dinámicamente, por ejemplo:
Ejemplo #3 usar __NAMESPACE__ para la construcción dinámica de nombres
<?php
namespace MiProyecto;
function obtener($nombreclase)
{
$a = __NAMESPACE__ . '\\' . $nombreclase;
return new $a;
}
?>
La palabra clave namespace se puede usar para solicitar explícitamente un elemento del espacio de nombres o subespacio de nombres actual. Es el espacio de nombres equivalente al operador self de las clases.
Ejemplo #4 El operador namespace, dentro de un espacio de nombres
<?php
namespace MiProyecto;
use blah\blah as mío; // véase "Usar espacios de nombres: Apodar/Importar"
blah\mío(); // llama a la función MiProyecto\blah\mío()
namespace\blah\mío(); // llama a la función MiProyecto\blah\mío()
namespace\func(); // llama a la función MiProyecto\func()
namespace\sub\func(); // llama a la función MiProyecto\sub\func()
namespace\nombrec::método(); // llama al método estático "método" de la clase MiProyecto\nombrec
$a = new namespace\sub\nombrec(); // instancia un objeto de la clase MiProyecto\sub\nombrec
$b = namespace\CONSTANTE; // asigna el valor de la constante MiProyecto\CONSTANTE a $b
?>
Ejemplo #5 El operador namespace, en código global
<?php
namespace\func(); // llama a la función func()
namespace\sub\func(); // llama a la función sub\func()
namespace\nombrec::método(); // llama al método estático "método" de la clase nombrec
$a = new namespace\sub\nombrec(); // instancia un objeto de la clase sub\nombrec
$b = namespace\CONSTANTE; // asigna el valor de la constante CONSTANTE a $b
?>
