(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
.