Espacios de Nombres
PHP Manual

Usar espacios de nombres: Apodar/Importar

(PHP 5 >= 5.3.0)

La capacidad de referirse a un nombre completamente cualificado externo con un alias, o importar, es una característca importante de los espacios de nombres. Esto es similar a la capacidad de los sistemas de archivos basados en Unix de crear enlaces simbólicos a un archivo o directorio.

Los espacios de nombres de PHP soportan tres tipos de poner alias o importar: apodar un nombre de clase, apodar un nombre de interfaz, y apodar un nombre de espacio de nombres. Observe que importar una función o una constante no está soportado.

En PHP, apodar se lleva a cabo con el operador use. Aquí hay un ejemplo que muestra los tres tipos de importación:

Ejemplo #1 Importar/apodar con el operador use

<?php
namespace foo;
use 
Mi\Completo\NombreDeClase as Otra;

// esto es lo mismo que usar Mi\Completo\NombreEN as NombreEN
use Mi\Completo\NombreEN;

// importar una clase global
use ArrayObject;

$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
?>
Observe que para los nombres de espacios de nombres (nombres de espacios de nombres completamente cualificados que contienen el separador de espacios de nombres, como Foo\Bar en oposición a los nombres globales que no lo contienen, como FooBar), no es necesaria y no está recomendada la barra invertida inicial, ya que los nombres importados deben ser completamente cualificados, y no son procesados en relación al espacio de nombres actual.

PHP soporta adicionalmente un atajo apropiado para poner múltiples sentencias use en la misma línea

Ejemplo #2 Importar/apodar con el operador use, múltiples sentencias use combinadas

<?php
use Mi\Completo\NombreDeClase as OtraMi\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 en tiempo de compilación, y al hacerlo no afecta a los nombres de clases, funciones o constantes.

Ejemplo #3 La importación y los nombres dinámicos

<?php
use Mi\Completo\NombreDeClase as OtraMi\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 sólo afecta a los nombres no cualificados y cualificados. Los nombres completamente cualificados son absolutos, y no son afectados por la importación.

Ejemplo #4 La importación y los nombres completamente cualificados

<?php
use Mi\Completo\NombreDeClase as OtraMi\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 ámbito para la importación

La palabra clave use debe ser declarada en el ámbito exterior de un fichero (el ámbito global) o dentro de declaraciones de espacios de nombres. Esto es porque la importación se realiza en tiempo de compilación y no en tiempo de ejecución, por lo que no puede ser delimitada en bloque. El siguiente ejemplo mostrará un uso ilegal de la palabra clave use:

Ejemplo #5 Regla de importación ilegal

<?php
namespace Languages;

class 
Greenlandic
{
    use 
Languages\Danish;

 ...
}
?>

Nota:

Las reglas de importación tiene una base por fichero, lo que significa que los archivos incluidos NO heredarán las reglas de importación del padre.


Espacios de Nombres
PHP Manual