Bueno los namespace se usan cuando estás trabajando con grandes módulos y quieres evitar "enfrantamientos" (no encontré otra definición para clashes). Vamos a suponer que quieres crear una tienda electrónica. En esa tienda tienes un archivo llamado
carro.php y que en ese archivo tienes declarado una función llamada
mostrar (así mismo con clases y constantes):
Código PHP:
Ver original<?php
function mostrar($carro){
//mostrar carro
}
mostrar($_SESSION['carro']);
Pero también tienes otro archivo que es para verificar lo que quiere comprar un usuario, a ese archivo llamaremos
contenido.php, que también tiene una función llamada
mostrar.
Código PHP:
Ver original<?php
function mostrar($contenidoCarro){
//mostrar contenido
}
Tu vas a querer incluir este archivo en el archivo de
carro.php
Código PHP:
Ver originalrequire_once 'contenido.php';
function mostrar($carro){
//mostrar carro
}
if( $_GET['action'] == 'checkout'){
mostrar($_SESSION['carro']);
}else{
mostrar($_SESSION['carro']);
}
Cuando corres el código verás un mensaje
Cita: PHP Fatal error: Cannot redeclare mostrar() (previously declared in contenido.php:4) in carro.php on line 4
Esto es porque no puedes declarar dos funciones con el mismo nombre. Tampoco se ve claramente que función es la que quiero que corra en cual parte de la estructura de control. Para evitar este problema, PHP 5.3 agregó los
namespace. Los
namespaces tienen restricciones (te recomiendo que vayas
al manual para que veas de que hablo). Entre una de ellas está el declararlo al inicio de todo código y todo código que esté después pertenece a ese
namespace. Entonces agregando el namespace al archivo
contenido.php
Código PHP:
Ver original<?php
namespace Contenido;
function mostrar($contenidoCarro){
//mostrar contenido
}
En el archivo de carro lo indicamos de esta foma
Código PHP:
Ver original<?php
require_once 'contenido.php';
function mostrar($carro){
//mostrar carro
}
if( $_GET['action'] == 'checkout'){
Contenido\mostrar($_SESSION['carro']);
}else{
mostrar($_SESSION['carro']);
}
También puedes crear
sub-namespace, etc. Te recomiendo que mires
el manual para que puedas ver lo que puedes hacer con
namespace