(PHP 5 >= 5.3.0, PHP 7, PHP 8)
Uso de espacios de nombres: importación y alias
La capacidad de hacer referencia a un nombre absoluto con un alias o importando
un espacio de nombres es estratégica. Es un beneficio similar a los enlaces
simbólicos en un sistema de archivos.
PHP puede crear alias(/importar) constantes, funciones, clases, interfaces,
traits, enumeraciones y espacios de nombres.
Un alias se crea con el operador use
.
Aquí hay un ejemplo que presenta los cinco tipos de importación:
Ejemplo #1 Importación y alias con el operador use
<?php
namespace foo;
use My\Full\Classname as Another;
// Esto es lo mismo que use My\Full\NSname as NSname
use My\Full\NSname;
// importación de una clase global
use ArrayObject;
// importación de una función
use function My\Full\functionName;
// alias de una función
use function My\Full\functionName as func;
// importación de una constante
use const My\Full\CONSTANT;
$obj = new namespace\Another; // instancia un objeto de la clase foo\Another
$obj = new Another; // instancia un objeto de la clase My\Full\Classname
NSname\subns\func(); // llama a la función My\Full\NSname\subns\func
$a = new ArrayObject(array(1)); // instancia un objeto de la clase ArrayObject
// Sin la instrucción "use ArrayObject" habríamos instanciado un objeto de la clase foo\ArrayObject
func(); // Llama a la función My\Full\functionName
echo CONSTANT; // muestra el valor de My\Full\CONSTANT
?>
Tenga en cuenta que para los nombres con ruta (los nombres absolutos que contienen
separadores de espacios, como
Foo\Bar
, en comparación con
los nombres globales, como
FooBar
, que no los contienen),
el antislash inicial no es necesario y no se recomienda, ya que los nombres importados
deben ser absolutos y no se resuelven relativamente al espacio de nombres actual.
Además, PHP admite atajos prácticos, como las instrucciones use múltiples.
Ejemplo #2 Importación y alias múltiples con el operador use
<?php
use My\Full\Classname as Another, My\Full\NSname;
$obj = new Another; // instancia un objeto de la clase My\Full\Classname
NSname\subns\func(); // llama a la función My\Full\NSname\subns\func
?>
La importación se realiza durante la compilación, por lo que no afecta
a las clases, funciones y constantes dinámicas.
Ejemplo #3 Importación y nombres de espacios dinámicos
<?php
use My\Full\Classname as Another, My\Full\NSname;
$obj = new Another; // instancia un objeto de la clase My\Full\Classname
$a = 'Another';
$obj = new $a; // instancia un objeto de la clase Another
?>
Además, la importación solo afecta a los nombres sin calificación. Los nombres
absolutos siguen siendo absolutos y no se modifican por una importación.
Ejemplo #4 Importación y nombres de espacios absolutos
<?php
use My\Full\Classname as Another, My\Full\NSname;
$obj = new Another; // instancia un objeto de la clase My\Full\Classname
$obj = new \Another; // instancia un objeto de la clase Another
$obj = new Another\untruc; // instancia un objeto de la clase My\Full\Classname\untruc
$obj = new \Another\untruc; // instancia un objeto de la clase Another\untruc
?>
Reglas de contexto para la importación
La palabra clave use
debe declararse en el contexto más
externo de un archivo (el contexto global) o en las declaraciones de espacio
de nombres. Esto se debe a que la importación se realiza durante la compilación
y no durante la ejecución, por lo que no se pueden apilar los contextos. El ejemplo
siguiente muestra usos incorrectos de la palabra clave use
:
Ejemplo #5 Reglas de importación incorrectas
<?php
namespace Languages;
function toGreenlandic
{
use Languages\Danish;
// ...
}
?>
Nota:
Las reglas de importación se basan en archivos, lo que significa que los archivos
incluidos no heredarán PAS las reglas de importación del archivo padre.
Declaración del grupo use
Las clases, funciones y constantes importadas desde
el mismo namespace
pueden agruparse en una
sola instrucción use
.