PHP父,抽象类和接口文件名约定

时间:2011-07-04 23:55:02

标签: php class naming-conventions

在开发类库时,是否有最佳实践来命名文件?

我在想它应该反映出类的层次结构。我正在考虑实现类似的东西:

Foundation.parent.class.php // Concrete parent class (Class with common implementations)
File.abstract.class.php     // Abstract class (extends Foundation)  
FileLog.class.php           // Child class (extends File)

所以在这个惯例中:

  • 仅用作另一个类的基础的具体类具有后缀parent
  • 抽象类具有后缀abstract
  • 子类以其扩展的类名开头

这是一个很好的实现还是有更好的方法?

4 个答案:

答案 0 :(得分:11)

Naming conventions

文件名不应该有前缀的任何后缀 - 只有类的名称,以便可以通过autoloader找到它们。

  

子课程从课程开始   名称它正在扩展

从不。通常的做法是添加(到类的名称)单词,如Interface或Abstract,但不是父母的名字。

答案 1 :(得分:2)

在类名,自动加载,接口等方面有很多不同的方法来构建你的系统,你要记住的是,如果其他人将要使用代码,开发它,你想要使其简单易学,否则开发人员将难以编码。

上面提到的方法有很多种,其中一种是PSR-0,它关注类名,命名空间和目录结构,这是一个简单的概念,许多大型开发人员都使用它,例如{ {1}}和其他许多人

我正在研究一个系统,虽然它没有PSR-0结构但它仍然很简单:

您可以在此处访问来源并进行浏览:https://github.com/AdminSpot/ASFramework

我也不确定你的约定是否适用于库,我的意思是文件名与实际代码没有关联,所以将类名与父和接口相结合是毫无意义的,因为你永远不会通过它所扩展的类的名称。

如果它主要是您对自动解决方案加载类依赖关系感兴趣的依赖项,那么我将采用PSR-0解决方案。

基本上,您可以执行以下操作:

Zend

像这样构建你的类:

function autoload($className)
{
    $className = ltrim($className, '\\');
    $fileName  = '';
    $namespace = '';
    if ($lastNsPos = strripos($className, '\\')) {
        $namespace = substr($className, 0, $lastNsPos);
        $className = substr($className, $lastNsPos + 1);
        $fileName  = str_replace('\\', DIRECTORY_SEPARATOR, $namespace) . DIRECTORY_SEPARATOR;
    }
    $fileName .= str_replace('_', DIRECTORY_SEPARATOR, $className) . '.php';

    require $fileName;
}
spl_autoload_register('autoload');

然后您不需要事先包含,因为class HTTP_Input extends HTTP_Protocol implements Interface_Readable_Context{} 会自动加载以下内容:

  • HTTP / Input.php
  • HTTP / Protocol.php
  • 接口/读/ Context.php

答案 2 :(得分:1)

除了使用框架之外,没有命名文件的规则。您可以根据需要随意命名文件,但是,如果您使用的是框架,则在尝试加载文件时可能会导致错误。

最佳实施是您在使用时感觉最好的实现。

答案 3 :(得分:1)

这个问题很难回答,因为它很大程度上取决于你对自己有什么好处。从我自己的实践来看,我只能建议给出自然而非技术名称。我几乎完全放弃在我的类名中使用Interface或Abstract,在名称前使用CIA这样的简短版本删除。我现在甚至试图阻止这样的事情。给这个班级一个应得的名字;)。

找出某个东西是一个接口或一个类本身是抽象的是没有问题的。那已经是语言了。所以另外把它放到同一个类名中(对于父类来说有点相同,但是你经常自然地命名相关的子类)只是多余的。

最后,您只需按名称使用您的课程。所以找到好名字而不是技术名称可能是底线。书中有一个很好的章节叫做清洁代码,关于为你的班级找到好名字。

class Classname
Classname.php

接下来,使用命名空间(如果由于PHP版本而无法使用它们,则使用前缀形式的pseudeo-namspaces)并将类放入子目录并使用一个文件=一个类。

Interface \File
File.php
class \File\Text
File/Text.php
class \File\PHP
File/PHP.php

经常重构并审核您的代码;)。快乐的编码;)