Как использовать пространства имен с 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 будет иметь дело с версией кода с именами, , если простое переименование и некоторая реорганизация кода могут достичь этого.
Ответы
Ответ 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
, излишне сложно реализовать, из-за принятия решения с помощью мыши, используя обратную косую черту как разделитель пространства имен.