php: ejemplo de uso de los namespace

Los namespace se usan para encapsular clases, por ejemplo si tenemos diferentes clases pero con el mismo nombre, por ejemplo en un entorno MVC. En PHP los namespace se habilitaron a partir de la versión: 5.3, veamos un ejemplo de una estructura de una aplicación MVC en PHP:

namespace adibidie

Podemos observar que tenemos clases con el mismo nombre, ¿cómo utilizarlos?

lib/login.class.php

<?php
namespace lib;
class login
{
    public function __construct()
    {
        echo "lib: login\n";
    }
}
?>

mvc/model/login.class.php

<?php
namespace model;
require_once('lib/login.class.php');

class login
{
    public function __construct()
    {
        $login = new \lib\login();
        echo "model: login\n";
    }
}
?>

mvc/controller/login.class.php

<?php
namespace controller;
require_once('mvc/model/login.class.php');

class login
{
    public function __construct()
    {
        $login = new \model\login();
        echo "controller: login\n";
    }
}
?>

index.php

<?php
require_once('mvc/controller/login.class.php');
header("Content-Type:text/plain");
$login = new \controller\login();
?>

¿Cómo llamamos a las clases que están en el CORE de PHP?

lib/login.class.php

<?php
namespace lib;
class login
{
    public function __construct()
    {
        echo "lib: login\n";
        new DOMDocument();
    }
}
?>

ERROR:

PHP Fatal error:  Class 'lib\\DOMDocument' not found in lib/login.class.php on line 8

Para solucionarlo añadimos \ al principio del nombre de la clase:

lib/login.class.php

<?php
namespace lib;
class login
{
    public function __construct()
    {
        echo "lib: login\n";
        new \DOMDocument();
    }
}
?>

salida por pantalla de la página: index.php en el navegador.

lib: login
model: login
controller: login

Post to Twitter

This entry was posted in Internet, Programacion, Software, Tutoriales / Manuales and tagged , , , . Bookmark the permalink.

Deja un comentario

Tu dirección de correo electrónico no será publicada.