2009-11-07 14 views
10

Namespaces sind wirklich nützlich und PHP hatte keine Unterstützung für sie bis zu den letzten paar Veröffentlichungen, AFAIK.
Wenn ich Zend Framework verwende, muss ich mich erinnern lange Namen mit Unterstrichen - wie Zend_Form_Element_Button oder Zend_Form_Decorator_HtmlTag und so weiter.
Wenn ich Namespaces verwenden, dies möglich sein könnte, und so viel einfacher:Wie verwende ich Namespaces mit Zend Framework?

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

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

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

Und, es zu benutzen ich dies tun:

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

So ist meine Frage, ist es trivialer möglich , angesichts der Autoloader-System und eine Menge von Meta-Klasse "Black Magic", die innerhalb Zend Framework lebt, um die Struktur des Codes mit Namespaces umschreiben, und haben dann mehr vernünftige Klassennamen?
Das Problem ist nicht die Länge der Klassennamen - Eclipse/Netbeans/Aptana behandeln das sehr gut, es ist der Reiz, dass lange Namen sind.
Tends zu bekommen verwirrend nach einiger Zeit, wenn einige Klassen verwenden Sie haben ähnliche Teile in den Namen.
Da ZF ist Open Source lizenziert, glaube ich nicht, Zend würde eine Namespace-Version des Codes, kümmern, wenn nur Umbenennung und einige Reorganisation von Code erreichen kann, dass.

+0

Warum haben Sie dies als Community-Wiki markiert? –

+0

Hauptfehler in der Schätzung. Duh. Ich kann den Community-Status auch nicht rückgängig machen. Entschuldigung. Ich habe erwartet, dass dies für viele Leute nützlich und so bearbeitet usw. Es ist überhaupt nicht trivial, wie der Thread zu deutlich zeigt. – namespaceform

Antwort

16

Nicht trivial, nein.

Matthew schrieb Weier O'Phinney einen Blog über einige der Fragen wird ZF stellen müssen, ob und wann sie den Code Refactoring PHP 5.3 Namespacing unterstützen:

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

Abstract ist ein reservierter Wort in PHP. Das Gleiche gilt für Schnittstellen. Betrachten diese besonders aggregious Beispiel:

namespace Zend::View 

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

Wir haben zwei reservierte Worte gibt: Abstract und Interface.

Das Zend Framework ist voller Klassen mit den Namen Abstract und Interface. Sie müssen eine große Anzahl von rückwärtskompatiblen Refactoring-Änderungen vornehmen, damit der ZF-Code Namespaces unterstützt.

Auch da Backslash ist ein Metazeichen in Strings, jeder Code, die Klassen basierend auf Klassennamen, wie Zend_Db::factory() oder Zend_Filter_Input dynamisch lädt, unnötig schwer zu realisieren ist, wegen der verrückten Entscheidung des PHP-Kernteam gemacht, Backslash als Namespace-Trennzeichen.

+0

Einverstanden.Ich fragte mich, warum sie Backslash verwendeten, wenn Zeichen wie §, ~ oder irgendeine Kombination wie //, ~~ den Job so gut machen würden ... –

+4

Sie behaupteten, es sei nur ein einzelnes druckbares Zeichen in einfachem ASCII, das sie verwenden könnten, ohne zu verwirren der Parser. Jeder andere Charakter hatte bereits eine andere Bedeutung in PHP. Trotzdem halte ich Backslash für eine schlechte Wahl. Sie sollten eine Folge von zwei (oder mehr) Zeichen verwendet haben, bevor sie sich für den Backslash entschieden haben. –