
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();