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

<?php

// Código anterir a PHP 7
use un\espacioDeNombres\ClaseA;
use
un\espacioDeNombres\ClaseB;
use
un\espacioDeNombres\ClaseC as C;

use function
un\espacioDeNombres\fn_a;
use function
un\espacioDeNombres\fn_b;
use function
un\espacioDeNombres\fn_c;

use const
un\espacioDeNombres\ConstA;
use const
un\espacioDeNombres\ConstB;
use const
un\espacioDeNombres\ConstC;

// Código de PHP 7+
use un\espacioDeNombres\{ClaseA, ClaseB, ClaseC as C};
use function
un\espacioDeNombres\{fn_a, fn_b, fn_c};
use const
un\espacioDeNombres\{ConstA, ConstB, ConstC};