In general, abstract classes follow the same conventions as classes,
with one additional rule: abstract class names must end in the term, "Abstract",
and that term must not be preceded by an underscore. As an example,
Zend_Controller_Plugin_Abstract is considered an
invalid name, but Zend_Controller_PluginAbstract or
Zend_Controller_Plugin_PluginAbstract would be valid
names.
Note
This naming convention is new with version 1.9.0 of Zend Framework. Classes that pre-date that version may not follow this rule, but will be renamed in the future in order to comply.
The rationale for the change is due to namespace usage. As we look towards Zend Framework 2.0 and usage of PHP 5.3, we will be using namespaces. The easiest way to automate conversion to namespaces is to simply convert underscores to the namespace separator -- but under the old naming conventions, this leaves the classname as simply "Abstract" or "Interface" -- both of which are reserved keywords in PHP. If we prepend the (sub)component name to the classname, we can avoid these issues.
To illustrate the situation, consider converting the class
Zend_Controller_Request_Abstract to use namespaces:
namespace Zend\Controller\Request;
abstract class Abstract
{
// ...
}
Clearly, this will not work. Under the new naming conventions, however, this would become:
namespace Zend\Controller\Request;
abstract class RequestAbstract
{
// ...
}
We still retain the semantics and namespace separation, while omitting the keyword issues; simultaneously, it better describes the abstract class.




