Los espacios de nombres son un mecanismo de lenguaje de programación para organizar variables, funciones y clases. PHP 5.3 añade soporte para espacios de nombres, que voy a demostrar en el siguiente ejemplo:
Digamos que quisiera combinar dos proyectos que utilizan el mismo nombre de la clase usuario, pero tienen diferentes implementaciones de cada uno:
// Code for Project One (proj1.php)
<?php
class User {
protected $userId;
public function getUserId() {
return $this->userId;
}
}
$user = new User;
echo $user->getUserId();
?>
// Code for Project Two (proj2.php)
<?php
class User {
public $user_id;
}
$user = new User;
echo $user->user_id;
?>
<?php
// Combine the two projects
require 'proj1.php';
require 'proj2.php'; // Naming collision!
$myUser = new User; // Which class to use?
?>
Para las versiones de PHP inferiores a 5.3, que tendría que pasar por la molestia de cambiar el nombre de la clase para todas las instancias de la clase usuario utilizado por uno de los proyectos para evitar una colisión de nombres:
<?php
class ProjectOne_User {
// ...
}
$user = new ProjectOne_User; // Code in Project One has to be changed too
?>
Para las versiones de PHP mayor o igual a 5.3, puede utilizar espacios de nombres cuando se crea un proyecto, mediante la adición de una declaración de espacio de nombres:
<?php
// Code for Project One (proj1.php)
namespace ProjectOne;
class User {
// ...
}
$user = new User;
?>
<?php
// Combine the two projects
require 'proj1.php';
use ProjectOne as One; // Declare namespace to use
require 'proj2.php' // No collision!
$user = new \One\User; // State which version of User class to use (using fully qualified namespace)
echo $user->user_id; // Use ProjectOne implementation
?>
para más información:
muy bien ilustrado, con comentarios y código. +1 –
de acuerdo. Muy bien hecho. Solo desearía que fueran con un delimitador diferente entre espacio de nombres y clase. :( –
Con todo el delimitador de pinzamientos: funcionará perfectamente bien si solo utiliza cadenas de comillas simples que hago para cada cadena en php a excepción de nuevas líneas –