如何在Zend Framework中使用名称空间?

nam*_*orm 10 zend-framework namespaces

命名空间非常有用,直到最近的几个版本AFAIK,PHP才支持它们.
当我使用Zend Framework,我要记住很长的名字用下划线 -样Zend_Form_Element_ButtonZend_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会介意代码的命名空间版本,如果仅仅重命名和一些代码的重组可以实现这一点.


Bil*_*win 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
{
    // ...
}   
Run Code Online (Sandbox Code Playgroud)

我们在那里有两个保留词:AbstractInterface.

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

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

  • 他们声称它只是普通ASCII中可以使用的单个可打印字符,而不会混淆解析器.每个其他角色在PHP中都有另一个含义.尽管如此,我认为反斜杠是一个糟糕的选择.在决定使用反斜杠之前,他们应该使用两个(或更多)字符的序列. (4认同)