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:

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