Как использовать пространства имен с 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 сделала, используя обратную косую черту в качестве разделителя пространства имен.