(PHP 5 >= 5.3.0, PHP 7, PHP 8)
Uso de los 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 ficheros.
PHP puede aliasar(/importar) las constantes, funciones, clases, interfaces,
traits, enumeraciones y los espacios de nombres.
Un alias se crea con el operador use
.
A continuación se muestra un ejemplo que presenta los cinco tipos de importación:
Ejemplo #1 Importación y alias con el operador use
<?php
namespace foo;
use Mi\Completo\NombreDeClase as Otra;
// esto es lo mismo que utilizar Mi\Completo\NombreEN as NombreEN
use Mi\Completo\NombreEN;
// importar una clase global
use ArrayObject;
// importar una función (PHP 5.6+)
use function Mi\Completo\nombreDeFunción;
// apodar una función (PHP 5.6+)
use function Mi\Completo\nombreDeFunción as func;
// importar una constante (PHP 5.6+)
use const Mi\Completa\CONSTANTE;
$obj = new namespace\Otra; // instancia un objeto de la clase foo\Otra
$obj = new Otra; // instancia un objeto de la clase class Mi\Completo\NombreDeClase
NombreEN\suben\func(); // llama a la función Mi\Completo\NombreEN\subes\func
$a = new ArrayObject(array(1)); // instancia un objeto de la clase ArrayObject
// sin el "use ArrayObject" instanciaríamos un objeto de la clase foo\ArrayObject
func(); // llama a la función Mi\Completo\nombreDeFunción
echo CONSTANT; // imprime el valor de Mi\Completa\CONSTANTE;
?>
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 es recomendado, ya que los nombres importados
deben ser absolutos y no se resuelven relativamente al espacio de nombres actual.
Además, PHP soporta atajos prácticos, como las instrucciones use múltiples.
Ejemplo #2 Importación y alias múltiples con el operador use
<?php
use Mi\Completo\NombreDeClase as Otra, Mi\Completo\NombreEN;
$obj = new Otra; // instancia un objeto de la clase Mi\Completo\NombreDeClase
NombreEN\suben\func(); // llama a la función Mi\Completo\NombreEN\suben\func
?>
La importación se realiza durante la compilación, lo que hace que no afecte
a las clases, funciones y constantes dinámicas.
Ejemplo #3 Importación y nombres de espacios dinámicos
<?php
use Mi\Completo\NombreDeClase as Otra, Mi\Completo\NombreEN;
$obj = new Otra; // instancia un objeto de la clase Mi\Completo\NombreDeClase
$a = 'Otra';
$obj = new $a; // instancia un objeto de la clase Otra
?>
Además, la importación solo afecta a los nombres sin calificación. Los nombres
absolutos permanecen absolutos e inalterados por una importación.
Ejemplo #4 Importación y nombres de espacios absolutos
<?php
use Mi\Completo\NombreDeClase as Otra, Mi\Completo\NombreEN;
$obj = new Otra; // instancia un objeto de la clase Mi\Completo\NombreDeClase
$obj = new \Otra; // instancia un objeto de la clase Otra
$obj = new Otra\cosa; // instancia un objeto de la clase Mi\Completo\NombreDeClase\cosa
$obj = new \Otra\cosa; // instancia un objeto de la clase Otra\cosa
?>
Reglas de contexto para la importación
La palabra clave use
debe ser declarada en el contexto más
externo de un fichero (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 Idiomas;
function aGroenlandés
{
use Idiomas\Danés;
// ...
}
?>
Nota:
Las reglas de importación se basan en los ficheros, lo que significa que los ficheros
incluidos no heredarán PAS las reglas de importación del fichero padre.
Declaración del grupo use
Las clases, funciones y constantes importadas desde
el mismo namespace
pueden ser agrupadas en una
sola instrucción use
.