Подтвердить что ты не робот

Как использовать пространства имен с Zend Framework?

Пространства имен действительно полезны, и PHP не поддерживал их до появления последних нескольких выпусков AFAIK.
Когда я использую Zend Framework, я должен помнить длинные имена с символами подчеркивания - например, Zend_Form_Element_Button или Zend_Form_Decorator_HtmlTag и т.д.
Если я использую пространства имен, это может быть возможно и намного проще:

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

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

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

И для его использования я делаю это:

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

Итак, мой вопрос: это тривиально возможно, учитывая систему автозагрузчика и много мета-класса "черной магии", которая живет внутри Zend Framework, до переписать структуру код с использованием пространств имен, а затем иметь более разумные имена классов?
Проблема заключается не в длине имен классов - Eclipse/Netbeans/Aptana обрабатывает это очень хорошо, раздражитель, что длинные имена.
Как правило, через некоторое время становится запутанным, если некоторые классы, которые вы используете , имеют похожие части в именах.
Поскольку ZF является открытым исходным кодом, я не думаю, что Zend будет иметь дело с версией кода с именами, , если простое переименование и некоторая реорганизация кода могут достичь этого.

4b9b3361

Ответ 1

Не тривиально, нет.

Мэтью Вейер O'Phinney написал блог о некоторых проблемах, с которыми ZF столкнется, если и когда они реорганизуют код для поддержки PHP 5.3 namespacing:

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

Abstract является зарезервированным словом в PHP. То же самое касается интерфейсов. Рассматривать это особенно весомый пример:

namespace Zend::View

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

У нас есть два зарезервированных слова: Abstract и Interface.

Zend Framework полон классов с именем Abstract и Interface. Им нужно будет сделать большое количество обратных несовместимых изменений рефакторинга, чтобы сделать ZF-коды поддерживающими пространствами имен.

Кроме того, поскольку обратная косая черта является метасимволом в строках, любой код, который динамически загружает классы на основе имени класса, такие как Zend_Db::factory() или Zend_Filter_Input, излишне сложно реализовать, из-за принятия решения с помощью мыши, используя обратную косую черту как разделитель пространства имен.