命名空间非常有用,在最近几个版本AFAIK发布之前,PHP不支持它们。
当我使用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会介意代码的命名空间版本,如果只是重命名和一些代码的重新组织可以实现。
答案 0 :(得分:16)
不是微不足道,没有。
Matthew Weier O'Phinney撰写了一篇博客,介绍了ZF在重构代码以支持PHP 5.3命名空间时必须面对的一些问题:
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
)都不必要地难以实现,因为这是一个难以理解的决策PHP核心团队使用反斜杠作为命名空间分隔符。