2009-11-07 22 views
10

Los espacios de nombre son realmente útiles y PHP no tenía soporte hasta los últimos lanzamientos, AFAIK.
Cuando estoy usando Zend Framework, tengo que recordar nombres largos con caracteres de subrayado - como Zend_Form_Element_Button o Zend_Form_Decorator_HtmlTag y así sucesivamente.
Si utilizo espacios de nombres, esto podría ser posible, y por lo tanto mucho más fácil:¿Cómo uso los espacios de nombres con Zend Framework?

 
namespace Zend { 
    class something { 
    // ... 
    } 
} 

namespace Zend\Form { 
    class something { 
    // ... 
    } 
} 

namespace Zend\Form\Element { 
    class Button { 
    // ... 
    } 
} 

Y para usarlo hago esto:

 
use Zend\Form\Element\Button; 
$btn1 = new Button(); 

Así que mi pregunta es, es que trivialmente posible , dado el sistema de autocargador y una gran cantidad de metaclase "magia negra" que vive dentro de Zend Framework, a , vuelva a escribir la estructura del código usando los espacios de nombres, y luego tenga nombres de clase más sensibles?
El problema no es la longitud de los nombres de clase - Eclipse/Netbeans/Aptana manejar eso muy bien, es el irritante que los nombres largos son.
Tiende a obtener confundiendo después de un tiempo si algunas clases que usa tienen partes similares en los nombres.
Desde ZF es de código abierto con licencia, no creo Zend le importaría una versión de espacio de nombres del código, si mero cambio de nombre y algunas re-organización de código pueden lograr que.

+0

¿Por qué marcó esto como wiki de la comunidad? –

+0

Error principal en la estimación. Duh. No puedo deshacer el estado de la comunidad tampoco. Disculpas Esperaba que esto fuera útil para mucha gente y, por lo tanto, editado, etc. No es del todo trivial ya que el hilo vinculado muestra claramente. – namespaceform

Respuesta

16

No es trivial, no.

Mateo Weier O'Phinney escribió un blog sobre algunas de las cuestiones ZF tendrá que enfrentarse siempre y cuando refactorizar el código para apoyar PHP 5.3 namespacing:

http://weierophinney.net/matthew/archives/181-Migrating-OOP-Libraries-and-Frameworks-to-PHP-5.3.html

Abstract es una reservados palabra en PHP. Lo mismo vale para las interfaces. Considere este ejemplo particular aggregious:

namespace Zend::View 

abstract class Abstract implements Interface 
{ 
    // ... 
} 

Tenemos dos palabras reservadas allí: Abstract y Interface.

Zend Framework está lleno de clases llamadas Abstract y Interface. Tendrán que realizar una gran cantidad de cambios de refactorización incompatibles hacia atrás para hacer que el código ZF admita espacios de nombres.

También desde la barra invertida es una metacarácter en cadenas, cualquier código que carga dinámicamente clases basadas en nombre de la clase, tales como Zend_Db::factory() o Zend_Filter_Input, es innecesariamente difícil de implementar, debido a la decisión descabellada equipo central PHP hecho, el uso de la barra invertida como el separador del espacio de nombres.

+0

De acuerdo.Me preguntaba por qué usaban barras invertidas, cuando caracteres como §, ~ o alguna combinación como //, ~~ harían el trabajo tan bien ... –

+4

Ellos afirmaron que era solo un carácter imprimible en ASCII simple que podían usar, sin confundir el analizador. Todos los demás personajes tenían otro significado en PHP. A pesar de esto, creo que la barra invertida fue una mala elección. Deberían haber usado una secuencia de dos (o más) caracteres antes de decidirse por la barra invertida. –

Cuestiones relacionadas