zend-framework - 如何在 Zend Framework 中使用命名空间?

标签 zend-framework namespaces

命名空间 非常有用,直到最近的几个版本 AFAIK,PHP 才支持它们。
当我使用 Zend Framework 时,我必须记住 带下划线的长名称 - 喜欢 Zend_Form_Element_ButtonZend_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 and Interface.



Zend 框架充满了名为 Abstract 的类。和 Interface .他们将不得不进行大量向后不兼容的重构更改,以使 ZF 代码支持命名空间。

同样由于反斜杠是字符串中的元字符,任何基于类名动态加载类的代码,例如 Zend_Db::factory()Zend_Filter_Input , 不必要地难以实现,因为 PHP 核心团队做出了愚蠢的决定,使用反斜杠作为命名空间分隔符。

关于zend-framework - 如何在 Zend Framework 中使用命名空间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1691793/

相关文章:

使用类指针重载的 C++ 命名空间函数模板特化替代方案?

c# - 命名空间和子命名空间以及它们在 C# 中引用的库

zend-framework - 向soap服务器添加身份验证功能(使用Zend)?

php - Zend 框架中的 "Sub Controllers"

xml - 如何在 XSD 中使用 targetNamespace 来验证 XML

c# - TypeScript 中的命名空间关键字

c# - 无法从 Nuget 包访问命名空间

php - Zend 领域驱动设计

php - Zend Ajax无法删除

php - Zend Framework 中的数据库事务 : Are they isolated?