Namespaces en PHP

Buen día comunidad, el día de hoy quiero tratar con ustedes lo siguiente: ¿Qué son los namespaces? Sintáxis ¿Desde qué versión estan implementados en PHP? ¿Para qué me sirven en mis desarrollos?  

Diseño web
3 minutos
Hace 8 años
Namespaces en PHP

¡Accede a cientos de cursos
con solo un pago al año!

Blog Microbanner

Buen día comunidad, el día de hoy quiero tratar con ustedes lo siguiente:

  1. ¿Qué son los namespaces?
  2. Sintáxis
  3. ¿Desde qué versión estan implementados en PHP?
  4. ¿Para qué me sirven en mis desarrollos?

1.- Los namespaces, existen en PHP como una alternativa al control de colisiones en los nombres de variables, clases y   funciones; recordemos que como parte del ciclo de desarrollo con este lenguaje en mas de una ocasión usaremos: liberías de terceros que pudieran tener conflictos con los nombres que nosotros le declaremos a lo ya antes mencionado.

Tienen un alcance de bloque, dicho lo anterior todo lo que se escriba justo debajo de su declaración misma, pertenece a ese namespace.

2.- La sintáxis de un namespace es la siguiente:

iva9

Como puedes observar en la imagen anterior, su declaración va al inicio de cualquier bloque de código, es decir no debo colocar una variable, constante o función antes de, lleva al inicio la palabra reservada namespace y posterior el nombre del mismo acabando con un punto y coma;

3.- Existen en la familia de PHP 5, en específico a partir de la versión 5.3 y desde entonces sigue en funcionamiento

4.- Cuando se esta desarrollando, ¿para qué me sirven?

Usemos el siguiente ejemplo, para poder asimilar esta temática,estamos desarrollando un carrito de compras y queremos lograr lo siguiente, con la misma función para el país México aumentar al precio un 16% y para España disminuir un 21%; dado eso:

  1. declarar un mismo nombre de constante
  2. declarar un mismo nombre de función

Si hacemos lo anterior sin el uso de namespaces en el archivo llamado IVA.php; quedará del siguiente modo:

iva1

Sin embargo, al momento de procesar este script desde la consola me va a mostrar lo siguiente:

iva2

Lo anterior ocurre como ya habrán notado, por que los nombres estan con un alcance global y colisionan al momento de ser leidos por llamarse del mismo modo, aunque las funciones por dentro hagan cosas distintas ese es el error que obtendremos.

Si por el contrario, en base a la propia dinámica del ejercicio declaramos 2 namespaces del siguiente modo, observa la línea 2 y la línea 10 esa es la sintáxis para declararlos:

iva3

Con lo anterior, le acabo de indicar a este archivo que:

  • Todo el código que hay desde la línea 3 hasta la línea 8 pertenece únicamente a el namespace llamado IVAMexico; después de eso dejará de tener funcionalidad
  • Todo el código que hay desde la línea 11 hasta la línea 15 pertenece únicamente al namespace IVASpain

Ahora ejecutemos lo anterior desde la consola y observemos que nos muestra.

iva4

Como puedes observar, no me devuelve errores; no me imprime por que aún no hago uso de la instrucción echo.

Vamos un paso más allá, ahora dentro de nuestro ejemplo vamos a hacer uso de esta lógica pero desde otro archivo al que llamaremos ProcesaPagos.php y lo primero que haremos es requerir el archivo que se llama IVA.php; del modo siguiente:

iva5

Procedemos ahora a invocar los namespaces de nuestro archivo origen para poder interactuar con la lógica ya declarada en IVA.php, del mismo modo podemos declararle un alias es decir un nombre mas corto para simplificar el uso de los mismos así:

iva6

Y finalmente para poder imprimir el valor de un precio procesado lo hacemos del siguiente modo:

iva7

Como puedes observar en la imagen anterior voy accediendo en orden descendente con ayuda de la barra invertida; es decir primero coloco el alias que declaré al inicio, posterior declaro una contrabarra y al final el nombre de la función que procesa el pago pasándole como argumento un precio cualquiera.

Como resultado final desde la consola obtengo:

iva8

Espero te sea de utilidad, practica y checa los cursos de EDTEAM, hay uno de PHP  desde cero y otro #Laravel.

Saludos, nos vemos en una siguiente entrega

Comentarios de los usuarios