2009-11-07 2 views
10

Gli spazi dei nomi sono davvero utili e PHP non ha avuto supporto fino a quando non sono state rilasciate alcune versioni recenti, AFAIK.
Quando utilizzo Zend Framework, devo ricordare i nomi lunghi con caratteri di sottolineatura - come Zend_Form_Element_Button o Zend_Form_Decorator_HtmlTag e così via.
Se io uso gli spazi dei nomi, questo potrebbe essere possibile, e molto più facile:Come utilizzare gli spazi dei nomi con Zend Framework?

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

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

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

e di utilizzarlo faccio questo:

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

Quindi la mia domanda è, è banalmente possibile , dato il sistema di caricamento automatico e un sacco di "magia nera" meta class che vive all'interno di Zend Framework, su riscrivere la struttura del codice utilizzando gli spazi dei nomi e quindi avere nomi di classi più sensibili?
Il problema non è la lunghezza dei nomi delle classi: Eclipse/Netbeans/Aptana lo gestiscono molto bene, è il l'irritante che i nomi lunghi sono.
Tende a ottenere confondendo dopo un po 'di tempo se alcune classi si utilizzano hanno parti simili nei nomi.
Dal ZF è open source concesso in licenza, non credo che Zend sia dispiaciuto di una versione di namespace del codice, se la semplice modifica del nome e qualche riorganizzazione del codice possono raggiungere tale.

+0

Perché l'hai contrassegnato come wiki della comunità? –

+0

Errore principale nella stima. Duh. Non posso nemmeno annullare lo stato della comunità. Scuse. Mi aspettavo che questo fosse utile per molte persone e così modificato ecc. Non è affatto banale come il thread collegato a spettacoli chiaramente. – namespaceform

risposta

16

Non banale, no.

Matthew Weier O'Phinney ha scritto un blog su alcuni dei problemi ZF dovrà affrontare se e quando refactoring del codice per supportare PHP 5.3 namespacing:

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

Abstract è un riservati parola in PHP. Lo stesso vale per le interfacce. Considerate questo esempio particolarmente aggregious:

namespace Zend::View 

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

Abbiamo due parole riservate lì: Abstract e Interface.

Zend Framework è pieno di classi denominate Abstract e Interface. Dovranno fare un gran numero di modifiche di refactoring retro-incompatibili per rendere lo spazio dei nomi di codice ZF supporto.

Anche perché backslash è un metacarattere nelle stringhe, qualsiasi codice che carica dinamicamente le classi in base a nomeclasse, come ad esempio Zend_Db::factory() o Zend_Filter_Input, è inutilmente difficile attuazione, a causa della decisione strampalato il core team di PHP ha fatto, usando una barra inversa come separatore di spazi dei nomi.

+0

concordato.Mi chiedevo perché hanno usato il backslash, quando caratteri come §, ~ o alcune combinazioni come //, ~~ farebbero il lavoro come buono ... –

+4

Hanno affermato che era possibile utilizzare un solo carattere stampabile in ASCII normale, senza confondere il parser. Ogni altro personaggio aveva già un altro significato in PHP. Nonostante ciò, penso che il backslash sia stato una cattiva scelta. Avrebbero dovuto usare una sequenza di due (o più) caratteri prima di decidere sul backslash. –