Saltar la navegación

2.1.- Namespaces en PHP.

Cartas de colores.
Open Clipart (CC0)

Los namespaces o espacios de nombres permiten crear proyectos complejas con mayor flexibilidad evitando problemas de colisión entre clases, métodos, funciones y mejorando la legibilidad del código. aparecen a partir de PHP5.3

Los namespace son un contenedor que nos permitirá agrupar nuestro código para darle un uso posterior de esta manera evitamos conflictos de nombre. Por ejemplo, tenemos 2 funciones con el mismo nombre esto generaría un conflicto de nombre pero mediante el uso de namespace se da solución a este problema. En definitiva los namespace nos ayudaran para organizar y reestructurar mejor nuestro código y proporcionan una manera para agrupar clases, interfaces, funciones y constantes relacionadas.

Podemos comprarlo con el sistema de archivos, los archivos están dentro de carpetas y dentro de éstas hay a su vez otras carpetas con otros archivos. Una carpeta se comporta como si fuera un namespace, por ejemplo, no puede haber dos archivos con el mismo nombre en la misma carpeta, pero sí puede haber dos archivos con el mismo en distintas.

Veamos como funcionan. Hay que declararlo en la primeara línea de código

<?php
namespace Proyecto;
//la declaración del namespace debe ser la primera línea si no obtendremos un error

En un espacio de nombres se engloban:

  • Constantes.
  • Funciones.
  • Clases, interfaces, traits, clases abstractas.

Vemos un ejemplo más completo. Creemos el archivo "ejemploNamespace.php"

<?php
namespace Proyecto;
const E = 2.7182;
function saludo(){
    echo "Buenos dias";
}
class Prueba{
    private $nombre;
    public function probando(){
	echo "Esto es el método probando de la clase Prueba";
    }
}

Para pode usar este archivo en otra parte podemos hacerlo de varias formas:

<?php
include "ejemploNamespace.php";
echo Proyecto\E; // accedemos a la constante
Proyecto\saludo(); // accedemos a la función
$prueba=new Proyecto\Prueba();
$prueba->probando();

O bien :

<?php
include "ejemploNamespace.php";
use const Proyecto\E;
use function Proyecto\saludo;
use Proyecto\Prueba;
// ahora ya podemos usarlos
echo E;
saludo();
$prueba = new Prueba();
$prueba->probando();

Es una buena práctica de programación colocar los archivos del espacio de nombres en carpetas que tienen los mismos nombres que el namespace declarado.

La posibilidad de declarar el uso de una función o constante de un namespace está disponible solo a partir de PHP 5.6.

Autoevaluación

Pregunta 1

En un namespace solo guardaremos las clases para evitar colisiones entre ellas.

Sugerencia

A partir de PHP5.6 se incluyeron algunas características.