domingo, 28 de diciembre de 2014

Namespaces en PHP



Cuando trabaja en proyectos grandes en equipo, es útil modularizar las clases y las funciones. De esta manera, cada desarrollador puede trabajar con su propio módulo. Desde PHP 5.3, las namespaces (espacio de nombres), permiten esta modularización. Un namespace es una especie de carpeta virtual en la que almacena sus objetos. De esta manera es posible usar clases o funciones con el mismo nombre, en namespaces diferentes.

Un namespace se declara con la palabra clave namespace, seguido de su nombre, al inicio del archivo.

Por ejemplo:

Espacio_nombre.php

<?php
// Definición del espacio de nombres.
namespace Biblioteca;
// Definición de una constante.
const PI = 3.1416;
// Definición de una función.
function miFuncion() {
echo "Hola <br />";
}
// Definición de una clase.
class miClase {
/*
...
*/
}
?>

Uso_espacio_nombres.php:

<?php
include(’espacio_nombres.php’);
Biblioteca\miFuncion(); //Llamada al namespace Biblioteca raíz
?>

Muestra:

Hola

La constante __NAMESPACE__ devuelve el nombre del espacio de nombres actual.

Es posible crear sub-espacios de nombres escribiendo:

Namespace Espacio1/subespacio1;

Las rutas para encontrar una función, clase o constante en un espacio de nombres son relativos si empieza por el namespace o absoluto si empieza con /.

Por ejemplo:

Espacio_nombres.php:

<?php
// Definición del espacio de nombres.
namespace Biblioteca;
// Definición de una constante.
const PI = 3.1416;
// Definición de una función.
function miFuncion() {
echo "Hola <br />";
}
// Definición de una clase.
class Animal
{
// Declaración de los atributos
private $color = "gris";
//accesos
public function getColor()
{
return $this->color; //devuelve el color
}
public function setColor($color)
{
$this->color = $color; //escribe en el atributo color
}
}
?>

Uso_espacio_nombres.php

<?php
namespace Project;
include(’espacio_nombres.php’);
// Muestra el espacio de nombres actual.
echo ’Espacio de nombres actual = ’, __NAMESPACE__,’<br />’;
\Biblioteca\miFuncion(); //Llamada al namespace Biblioteca raíz
echo \Biblioteca\PI."<br />";
$gato = new \Biblioteca\Animal();
$gato->setColor("negro");
echo "El color del gato es:".$gato->getColor();
?>

Muestra:

Espacio de nombres actual:Project
Hola
3.1416
El color del gato es: negro

Para terminar, puede crear un alias en el espacio de nombres o en un objeto contenido en el espacio de nombres.

Para esto basta con usar el operador use [namespace] as nombre_nuevo

Por ejemplo:

Use\Biblioteca as biblio;

Con los alias, la página Uso_espacio_nombres.php, se convierte en:

<?php
namespace Project ;
include (´espacio_nombres.php’) ;
//Muestra el espacio de nombres actual.
echo ’Espacio de nombres actual = ’, _NAMESPACE_’<br />’;
\Biblioteca\miFuncion() ; llamada al namespace Biblioteca raíz
use\Biblioteca as biblio; // alias de un namespace
echo Biblioteca\PI., ”<br />”;
use \Biblioteca|Animal as ani; // alias de una clase
$gato = new ani (); // Llamada al alias de la clase
//Animal$gato->setColor (”negro”),
echo ”El color del gato es : ”.$gato->getColor();
?>

Muestra:

Espacio de nombres actual=Project
Hola
3.1416
El color del gato es: negro



Espero haber ayudado en algo. Hasta la próxima oportunidad!









No hay comentarios:

Publicar un comentario en la entrada