Как использовать пространства имен с Zend Framework?
пространства имен действительно полезны, и PHP не поддерживал их до последних нескольких выпусков AFAIK.
Когда я использую Zend Framework, я должен помнить длинные имена с подчеркивания - как Zend_Form_Element_Button
или Zend_Form_Decorator_HtmlTag
и так далее.
Если я использую пространства имен, это может быть возможно, и намного проще:
namespace Zend { class something { // ... } } namespace ZendForm { class something { // ... } } namespace ZendFormElement { class Button { // ... } }
и использовать его я делаю это:
use ZendFormElementButton; $btn1 = new Button();
Итак, мой вопрос:это тривиально можно, С учетом система автозапуска и много мета-класса "черная магия", которая живет внутри Zend Framework, чтобы переписать структуру кода, используя пространства имен, а затем имеют более разумные имена классов?
Проблема не в длине имен классов-Eclipse/Netbeans / Aptana обрабатывают, что очень хорошо, это раздражитель, что длинные имена.
Стремится получить заблуждение через некоторое время, когда некоторые классы вы используете имейте подобные части в имена.
С ZF с открытым исходным кодом лицензированный, я не думаю, что Zend будет возражать против пространственной версии кода,если простое переименование и некоторая реорганизация кода могут достичь этого.
1 ответов
не тривиально, нет.
Мэтью Уэйер О'Финни написал блог о некоторых проблемах, с которыми ZF придется столкнуться, если и когда они рефакторируют код для поддержки пространства имен PHP 5.3:
http://weierophinney.net/matthew/archives/181-Migrating-OOP-Libraries-and-Frameworks-to-PHP-5.3.html
Abstract
является зарезервированным словом в PHP. То же самое касается интерфейсов. Считать это особенно aggregious пример:namespace Zend::View abstract class Abstract implements Interface { // ... }
у нас есть два зарезервированных слова:
Abstract
иInterface
.
структура Zend полна классов с именем Abstract
и Interface
. Им придется внести большое количество обратно несовместимых изменений рефакторинга, чтобы сделать ZF-код поддержки пространств имен.
также, поскольку обратная косая черта является метасимволом в строках, любой код, который динамически загружает классы на основе classname, например Zend_Db::factory()
или Zend_Filter_Input
, излишне трудно реализовать, из-за решения заячьей головы команда PHP core сделала, используя обратную косую черту в качестве разделителя пространства имен.