Why? I have developed framework using PHP namespaces and studied Zend
Framework source codes and result is: if we use the new resolution
rules
(1), than in nearly all cases developers must prefix class names
with ,
only in few cases prefix is not required. Why? Because usually
classes in
more nested namespaces extends classes in less nested namespaces.
If you
don't believe, look in framework sources :-)A quick study on the Zend Framework source reveals most top-level
classes
requiring, using, and accepting as arguments "more inner" classes and
interfaces in the relevant namespace:Zend_Acl ==> Zend_Acl_Resource_Interface, Zend_Acl_Role_Interface,
Zend_Acl_Role_Registry, Zend_Acl_Assert_Registry...Regard, Stan Vassilev
Stan, ZF doesn't use namespaces yet. This is not namespaced code.
Namespaced code requires different convention
(http://framework.zend.com/wiki/display/ZFPROP/Naming+conventions+for+2.0+-+Matthew+Ratzloff).
In namespaced code there cannot be class Interface in namespace
Zend\Acl\Role. There must be class RoleInterface in Zend\Acl namespace.
Similary class Zend_Acl become Acl in Zend\Acl namespace. So look at the
code with namespace-eyes. Classes Zend_Acl, Zend_Acl_Resource_Interface,
Zend_Acl_Role_Interface... will exist in one namespace.
Every concrete plugins extending Zend\Controller\AbstractPlugin may
exists in namespace Zend\Controllers\Plugins. Classes in Zend\Controller
may not use classes in Zend\Controllers\Plugins (more abstract/common
may not use concrete plugins), but plugins in Zend\Controllers\Plugins
depends on classes in Zend\Controller. The "dependency-direction" should
be one way.
DG.
Zend_Acl ==> Zend_Acl_Resource_Interface, Zend_Acl_Role_Interface,
Zend_Acl_Role_Registry, Zend_Acl_Assert_Registry...Regard, Stan Vassilev
Stan, ZF doesn't use namespaces yet. This is not namespaced code.
Namespaced code requires different convention
(http://framework.zend.com/wiki/display/ZFPROP/Naming+conventions+for+2.0+-+Matthew+Ratzloff).In namespaced code there cannot be class Interface in namespace
Zend\Acl\Role. There must be class RoleInterface in Zend\Acl namespace.
Similary class Zend_Acl become Acl in Zend\Acl namespace. So look at the
code with namespace-eyes. Classes Zend_Acl, Zend_Acl_Resource_Interface,
Zend_Acl_Role_Interface... will exist in one namespace.
I've checked that wiki page before, and I'm following with interest how they
end up naming those, but that changes nothing.
Today, Zend_Acl uses Zend_Acl_Resource_Interface.
Tommorow, Zend\Acl uses Zend\Acl\ResourceInterface (or similar).
The fact is, PHP frameworks and especially Zend use plenty of factories and
facade classes, which by definition reach into inner-more classes and
provide simplified paradigm to the "outside world".
The Interface and Exception classes won't stay like this, but they'll still
be inside a subnamespace.
Regards, Stan Vassilev