Namespaces en PHP

php-namespaces

Cuando declaramos variables, constantes, funciones o clases en un archivo .php, todas estas entidades quedan incluidas en un ámbito global y son susceptibles a una colisión de nombres si no se vigila atentamente todo el código de nuestra aplicación.

Veamos el siguiente código:

name-collision-1.php

name-collision-2.php

Si ejecutamos el segundo archivo, para echo $var . "\n"; tenemos que $var equivaldrá a:

Igualmente, la redeclaración de la función foo resultará en un error

Ambos casos, si suponemos que la sobreescritura e $var no era intencionada, son un ejemplo de colisión de nombres.

Para evitar esto se usan los Namespaces o Espacios de Nombres.

Namespaces

Los namespaces nos ayudan a evitar la colisión de nombres y facilitan la segmentación, organización y encapsulación de código en espacios lógicos.

Cuando en nuestro código empleamos la palabra namespace situamos su ámbito. Esto es, toda entidad declarada pasará a formar parte de ese namespace. Para hacer uso de ellos sólo tenemos que declararlos mediante la palabra reservada namespace seguido de un identificador. Notar que un namespace puede tener una jerarquía y que un mismo namespace puede estar declarado en varios archivos .php

Veamos el siguiente código:

namespacing-1.php

namespacing-2.php

app1.php

Si ejecutamos app1.php obtendremos la siguiente salida:

Este ejemplo muestra como diferenciar selectivamente cada entidad de cada namespace.

Si ejecutamos el siguiente .php:

app2.php

Obtendremos la siguiente salida:

Vemos como en este contexto el uso de la palabra reservada namespace nos permite acceder a entidades del namespace referenciado sin necesidad de especificar la ruta del propio namespace.

Operador use

Puede haber casos en los que no queramos popular un namespace con nuevos elementos sino sencillamente tener acceso a los elementos de otro. Esto lo hemos visto anteriormente incluyendo códigos que tienen otros namespaces vía require. 

Haciendo uso del operador use podemos acceder a entidades de otros namespaces de forma abreviaba.

Por ejemplo, veamos el siguiente código:

use1.php

Una vez ejecutado obtenemos la siguiente salida:

use nos permite el acceso a elementos de un namespace usando sólo el último segmento de la ruta del namespace.

Con use también podemos abreviar la referencia de una entidad o emplear un alias añadiendo la palabra as.

Esto lo vemos ejecutando el siguiente código:

use2.php

Del que obtenemos la siguiente salida:

 

Acerca de

Ver todas las entradas de