Ver Mensaje Individual
  #3 (permalink)  
Antiguo 09/05/2010, 12:06
Avatar de abimaelrc
abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años, 6 meses
Puntos: 1517
Respuesta: Duda: Flash Messenger Zend Framework

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
  1. <?php
  2. function mostrar($carro){
  3.   //mostrar carro
  4. }
  5. 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
  1. <?php
  2. function mostrar($contenidoCarro){
  3.   //mostrar contenido
  4. }
Tu vas a querer incluir este archivo en el archivo de carro.php
Código PHP:
Ver original
  1. require_once 'contenido.php';
  2.  
  3. function mostrar($carro){
  4.   //mostrar carro
  5. }
  6.  
  7. if( $_GET['action'] == 'checkout'){
  8.   mostrar($_SESSION['carro']);
  9. }else{
  10.   mostrar($_SESSION['carro']);
  11. }
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
  1. <?php
  2. namespace Contenido;
  3.  
  4. function mostrar($contenidoCarro){
  5.   //mostrar contenido
  6. }
En el archivo de carro lo indicamos de esta foma
Código PHP:
Ver original
  1. <?php
  2. require_once 'contenido.php';
  3.  
  4. function mostrar($carro){
  5.   //mostrar carro
  6. }
  7.  
  8. if( $_GET['action'] == 'checkout'){
  9.   Contenido\mostrar($_SESSION['carro']);
  10. }else{
  11.   mostrar($_SESSION['carro']);
  12. }
También puedes crear sub-namespace, etc. Te recomiendo que mires el manual para que puedas ver lo que puedes hacer con namespace
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos

Última edición por abimaelrc; 09/05/2010 a las 15:12