free web hostingHosting24.com web hosting

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.

null

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:

Click aquí para descargar

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

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/

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

Hola Navegante.
Lamentablemente olvidé poner las ventajas del uso del namespace. Ni siquiera escribí alguna definición.
Tenía pensado hacerlo, pero por el apuro que tenía en publicar se me olvidó completamente.

Sobre lo que decís:
“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..?”

Si, tenés razón. Incluso yo utilizo solo una clase por archivo, y el archivo toma el nombre de la clase. Todo como en Java, ya que es así como me enseñaron.

Pero solo para mostrar el ejemplo usé 2 clases en un archivo. Esto es solo a manera de ejemplo, ya que lo encontré más práctico para entenderlo básicamente.

El enlace que publicas, es el mismo que el que escribí en el post, en los enlaces de las fuentes.

La parte 2 tendrán ejemplos de como definir 2 namespace en un mismo archivo. Utilizaré también un estructura de directorios y quizás algo más.

Por último: no son pocos los que dicen que los namespaces en PHP están mal implementados (http://phenobarbital.wordpress.com/2009/02/04/php-6-namespaces-una-mala-implementacion/). Hay mucha disconformidad. Pero yo solo me voy a limitar a mostrar lo básico de su uso.

[...] 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!! ;-) [...]

Deja un Comentario

(requerido)

(requerido)