命名空间 非常有用,直到最近的几个版本 AFAIK,PHP 才支持它们。
当我使用 Zend Framework 时,我必须记住 带下划线的长名称 - 喜欢 Zend_Form_Element_Button
或 Zend_Form_Decorator_HtmlTag
等等。
如果我使用命名空间,这可能是可能的,而且更容易:
命名空间 Zend {
类的东西{
//...
}
}
命名空间 Zend\Form {
类的东西{
//...
}
}
命名空间 Zend\Form\Element {
类按钮{
//...
}
}
为了使用它,我这样做:
使用 Zend\Form\Element\Button;
$btn1 = 新按钮();
所以我的问题是,是否微不足道 ,考虑到自动加载器系统和 Zend Framework 中存在的许多元类“黑魔法”,到 使用命名空间重写代码结构 ,然后有更合理的类名?
问题不在于类名的长度——Eclipse/Netbeans/Aptana 处理得很好,它是 长名字的刺激性 .
趋于获取令人困惑 一段时间后,如果您使用某些类(class) 名称中有相似部分 .
自 ZF 开源 许可,我认为 Zend 不会介意代码的命名空间版本,如果仅仅重命名和重新组织一些代码就可以实现 .
最佳答案
不是微不足道的,不。
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
is a reserved word in PHP. The same goes for interfaces. Consider this particularly aggregious example:namespace Zend::View abstract class Abstract implements Interface { // ... }
We've got two reserved words there:
Abstract
andInterface
.
Zend 框架充满了名为
Abstract
的类。和 Interface
.他们将不得不进行大量向后不兼容的重构更改,以使 ZF 代码支持命名空间。同样由于反斜杠是字符串中的元字符,任何基于类名动态加载类的代码,例如
Zend_Db::factory()
或 Zend_Filter_Input
, 不必要地难以实现,因为 PHP 核心团队做出了愚蠢的决定,使用反斜杠作为命名空间分隔符。
关于zend-framework - 如何在 Zend Framework 中使用命名空间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1691793/