Před nedávnou dobou byla uvedena verze 1.6 Zend Frameworku, o které se ale teď zmiňovat nechci. Ještě předtím proběhla na blogu jednoho z vývojářů frameworku - Matthew Weier O'Phinneyho zpráva o tom, že ve mezi vývojáři Zend Frameworku se začíná diskutovat o podpoře jmenných prostorů, které jsou nově v php 5.3. Nic není úplně jisté, ale určitá možnost se tu rýsuje a právě Matthew se na svém blogu zmiňuje o tom, jak by to mohlo eventuelně vypadat.
I takové základní balíčky jako Zend_Controller obsahují třídy s poměrně krkolomnými názvy, pak to vypadá nějak takto
$viewRenderer = Zend_Controller_Action_HelperBroker::getStaticHelper('viewRenderer');
Mnohem elegantnější zápis
$viewRenderer = HelperBroker::getStaticHelper('viewRenderer');
je určitě nasnadě. Ale jak na to. Aktuálně se v Zend Frameworku používá jmenná konvence taková, že namespaces se oddělují podtržítkem, to by ještě šlo, ale horší to je s abstraktními třídami a rozhraními. Tam platí konvence označovat abstraktní třídy slovem Abstract a rozhraní slovem Interface.
- Zend_Controller_Request_Abstract
- Zend_View_Interface
Tahle konvence je dobrá, pokud se potřebujete na serveru zorientovat v kódu přes utility jako grep
nebo find
, ale ve spojení s namespaces nefungují.
namespace Zend::Controller::Request class Http extends Abstract { // ... }
Podobně pro interface. Problém je v tom, že abstract
a interface
jsou rezervovaná slova v PHP. Je několik možností, jak to obejít. Jazyky jako Python a C# uvozují názvy interfaců velkým písmenem I a podobně pro abstraktní třídy používat A.
namespace Zend::Controller::Request class Http extends ARequest { // ... } a pro abstraktní třídy namespace Zend::View abstract class AView implements IView { // ... }
Další věc, kterou to ovlivní, bude autoloading, zejména se jedná o Exceptions.
namespace Foo::Bar class Baz { public function status() { throw new Exception("This isn't what you think it is"); } }
Tady se nepoužije Foo::Bar::Exception
, ale normální standardní Exception
. Bude se muset použít klíčového slova namespace
.
namespace Foo::Bar class Baz { public function status() { throw new namespace::Exception("This is exactly what you think it is"); } }
I tohle ale přináší problémy, např. právě třída Zend_Controller_Action
by se pak stala Zend::Controller::AAction
, hm nic moc. Dále je tu např. problém s top level třídami jako Zend_View
apod. Funkcionalita komponenty by se měla nacházet pod stejným namespacem, takže pak by to vypadalo na Zend::View::View
. Problémů je evidentně více jak dost, viz. docela bohatá diskuze pod originálním článkem. Jestli se vůbec někdy namespaces do Zend Frameworku dostanou, tak to nebude určitě dříve jak s verzí 2.0, protože jen u major verze lze dělat zpětně nekompatibilní změny.
Komentáře (0)
Komentáře jsou uzavřeny.