Lo imprescindible de los namespaces PHP explicado con ejemplos

Continuemos con la explicación de la clase PHP Translate del componente SimpleTranslation. Recuerda que la semana pasada nos servimos de este componente para explicar en el videocurso PHP guay (disponible en YouTube) cómo funciona el operador ternario. Pues bien, ¡hoy es el turno de los espacios de nombres PHP!

Antes de la llegada de los namespaces (característica muy notable disponible a partir de PHP 5.3) no era raro que los desarrolladores de código reutilizable, es decir, los programadores de componentes, librerías, frameworks de desarrollo, etc., pusieran nombres muy largos a sus etiquetas PHP. Así evitaban que dichos nombres colisionaran con los nombres de otros componentes desarrollados por terceros.

Así, por poner algún ejemplo, frameworks como Zend 1 ponían nombres tan largos como Zend_Translate_Adapter_Array a sus clases PHP. Sin los namespaces, todas las funciones, clases, constantes e interfaces quedaban definidos en el espacio de nombres global.

A continuación voy a explicar los ejercicios disponibles en GitHub phpguay/ejercicios/namespaces.

Archivo example-without-namespaces.php:

El código anterior lanza el siguiente error porque, como decimos, no se puede definir dos veces la misma cosa en el mismo espacio de nombres:

Los namespaces vienen a solucionar esta limitación.

Archivo example-with-namespaces.php:

El código anterior con namespaces genera la siguiente salida:

El ejemplo anterior es bastante clásico (y básico). Encontrarás variantes del mismo en otros sitios y, cómo no, en el manual oficial de PHP. Sin embargo es un ejemplo didáctico que en realidad no es nada práctico porque se desaconseja por completo combinar varios espacios de nombres en un mismo archivo. Digamos que es para entender las cosas.

Como indicábamos al principio, los namespaces están pensados para facilitar el desarrollo de librerías, para evitar las colisiones de nombres. Por lo tanto, son de interés para los programadores PHP OO en tanto que se ponen a desarrollar componentes reutilizables y no quieren que los nombres de sus etiquetas colisionen con otros nombres, creados por otros desarrolladores, en otros componentes de la app.

En phpguay/ejercicios/namespaces/oop-example está el ejemplo didáctico anterior, pero esta vez dentro de un contexto más real orientado a objetos.

Archivo Alice.php:

Archivo Bob.php:

Luego hay dos variantes de programa principal, que es quien utiliza las clases Alice y Bob:

Archivo main-01.php:

Archivo main-02.php:

main-02.php ilustra el funcionamiento de use para crear alias y no andar escribiendo repetidas veces los mismos namespaces al utilizar las clases Alice y Bob.

Bueno amig@s, ¡pues esto ha sido todo por hoy! Espero que esta introducción a los namespaces PHP os haya gustado y os sirva, de momento, para entender un poco mejor el funcionamiento de la clase PHP Translate. El manual de PHP explica de forma exhaustiva cómo funcionan los namespaces.

Esta explicación debería servir para entender cómo se inicializa la clase Translate:

0 comentarios

¿Me dejas un comentario? ¡Gracias!

Deja un comentario

Los campos obligatorios están marcados con *