namespace en PHP (Parte I)
Este tutorial se dividirá en 2 partes debido a que es largo para un solo tema en el blog. También aclaro que esto es solo lo básico sobe namespace con PHP.
Para poder armar este tutorial, me fue necesario recorrer varios sitios que tratan sobre el tema y así, gracias a esos sitios, logré entender lo básico para poder empezar a hacer uso del namespace. Entonces espero aclararles algunas dudas sobre este tema y transmitirles lo aprendido. Se aceptan sugerencias.
Al final del post encontrarán el código fuente del ejemplo y los enlaces a los sitios que me sirvieron de fuente. Recomiendo Netbeans 6.8 (o la última versión) como IDE.

Comencemos:
Se crearán 2 archivos. Uno se llamará “namespacesDeclaration.php” y el otro “Prueba.php”.
Archivo “namespacesDeclaration.php”
En este archivo crearemos 2 clases (ClaseEjemplo1 y ClaseEjemplo2), las cuales pertenecerán al namespace “clases\ejemplo”.
Ambas clases implementarán 2 métodos: un método estático llamado “metodoEstatico()”, y otro método llamado “imprimeCadena()”. Ambos métodos retornarán una cadena de caracteres.
En las siguientes líneas se explicará cómo crear un namespace y un “sub-namespace”.
Empezamos definiendo el namespace:
namespace clases;
En este caso nuestro espacio de nombres se llama “clases”.
Podemos también crear un Sub-namespace, es decir que se especifica una jerarquía de nombres, y el namespace tiene subniveles:
namespace clases\ejemplo;
Una vez definido el namespace, pasamos a crear las clases antes mencionadas. Entonces nuestro archivo quedaría de la siguiente manera:
namespace clases\ejemplo;
class ClaseEjemplo1
{
public static function metodoEstatico()
{
return 'Soy el metodo estatico de la clase de ejemplo 1';
}
public function imprimeCadena()
{
return 'Metodo imprime cadena de la clase ejemplo 1';
}
}
class ClaseEjemplo2
{
public static function metodoEstatico()
{
return 'Soy el metodo estatico de la clase de ejemplo 2';
}
public function imprimeCadena()
{
return 'Metodo imprime cadena de la clase ejemplo 2';
}
}
Con esto, ya tenemos 2 clases (ClaseEjemplo1 y ClaseEjemplo2) que pertenecen al namespace “clases\ejemplo”.
Importante: La declaración del namespace se debe hacer en la primera línea del código.
Archivo “Prueba.php”
Para utilizar estas clases en otros archivos tenemos varias maneras:
1 – Definimos el namespace en el archivo que utilizará las clases, y luego creamos una instancia de la clase e invocamos un método:
namespace clases\ejemplo; require_once "namespacesDeclarations.php"; $ejemplo1 = new ClaseEjemplo1(); echo $ejemplo1->imprimeCadena();
Importante: debemos recordar siempre incluir/requerir el archivo “namespacesDeclarations.php”. Esto se debe hacer luego de declarar el namespace.
2 – Utilizar la directiva “use”, que es el equivalente a la sentencia “import” en otros lenguajes. Esto nos da la posibilidad de utilizar “un alias”.
use clases\ejemplo\ClaseEjemplo1 as AliasMiClase; require_once "namespacesDeclarations.php"; $ejemplo1 = new AliasMiClase (); echo $ejemplo1->imprimeCadena();
El uso de un alias es opcional, también es correcto lo siguiente:
use clases\ejemplo\ClaseEjemplo1; require_once "namespacesDeclarations.php"; $ejemplo1 = new ClaseEjemplo1 (); echo $ejemplo1->imprimeCadena();
3 – Otra forma de utilizar las clases es haciendo referencia a las mismas con el nombre completo del namespace:
require_once "namespacesDeclarations.php"; $ejemplo1 = new \clases\ejemplo\ClaseEjemplo1(); echo $ejemplo1->imprimeCadena();
Cerrando el tutorial:
En el ejemplo tenemos 2 archivos ubicados en el mismo directorio. Podríamos crear un directorio de nombre “clases” y dentro de este otro directorio de nombre “ejemplo”.
Dentro de este último directorio podríamos colocar el archivo “namespacesDeclarations.php”
En el código solo cambia la línea que incluye/requiere el archivo:
require_once "clases/ejemplo/namespacesDeclarations.php";
Fuentes:
Netbeans.org
PHP Manual
Blog Jotadeveloper
Código fuente del ejemplo:
También te puede Interesar
¿Disfrutaste esta entrada? Por qué no dejas un comentario abajo y continúas la conversación, o te suscribes a mi feed y obtienes artículos como este enviados a tu lector de feeds.
Comentarios
Esta articulo que acabo de encontrar lo explica bien claro las ventajas del namespace que no percibí hasta este momento..
Link:
http://blog.jotadeveloper.com/2009/07/13/primeros-pasos-con-namespaces-en-php/
Tiene otras..?
Espero la “Parte 2″
Saludo Espero que tengas mas funciones.. lo mejor es mostrarlo con ejemplo simples y prácticos
[...] This post was mentioned on Twitter by Cesar Walter Gerez, Christian González. Christian González said: RT: @wgerez: Namespace en PHP (Parte 1) http://micodigobeta.com.ar/?p=1003 agendalo!!
[...]



Hola esta claro el Tutorial, pero lo que me vengo preguntado desde hace mucho cual es la ventaja del namespace..?
Porque yo en un principio pensé que era para poder organizar mejor las clases en los directorio y solucionar el problema de los niveles y eliminar el “incluye y el requiere”.
Pero no…;-(
Si es para poner todos las clases dentro de un archivo esto no va encontrá del OOP que por combeneficiado cada clase es un archivo como en Java o como se trataba de hace en php a la fecha..?
O esto va ser para tener una mejor integración en el futuro cuando los archivos .PHAR que es como un tipo de .JAR de java.
Pero tampoco lo veo muy interesante porque esto le quitaría mas performan a PHP ya que tendría que descomprimir los archivos cada ves que se llama y buscar los archivos dentro.
En la próxima nota contás la ventaja que tiene el namespace..?
Porque yo de momento lo estoy implementando des la manera “N°4)”
require_once “clases/ejemplo/namespacesDeclarations.php”; con directorios que es practica y prolija.
Saludos desde http://www.e-om.com.ar/