PHP父类,抽象类和接口文件名约定[已关闭]

yftpprvb  于 2023-01-12  发布在  PHP
关注(0)|答案(5)|浏览(106)
    • 已关闭**。此问题为opinion-based。当前不接受答案。
    • 想要改进此问题吗?**请更新此问题,以便editing this post可以用事实和引文来回答。

1小时前关闭。
Improve this question
在开发类库时,是否有命名文件的最佳实践?
我想它应该反映类的层次结构,我想实现类似这样的东西:

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
  • 子类以其扩展的类名开头

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

cnjp1d6j

cnjp1d6j1#

Naming conventions
文件名不应该有任何前缀的后缀-只有类名,以便可以通过autoloader找到它们。
子类以其扩展的类名开头
从来没有。在类名中添加像Interface或Abstract这样的单词是一种常见的做法,但绝对不会添加父类的名字。

o2rvlv0m

o2rvlv0m2#

有很多不同的方法来构造你的系统关于类名,自动加载,接口等,你必须记住的是,如果其他人要使用的代码,开发它,你要使它简单易学,否则开发人员将有一个很难编码它。
如上所述,有许多方法,其中之一是PSR-0,它负责处理类名、命名空间和目录结构,这是一个简单的概念,被许多大型开发人员使用,如Zend和许多其他人
我目前正在开发一个系统,虽然它没有PSR-0结构,但仍然非常简单:
您可以访问这里的源代码,并采取浏览:https://github.com/AdminSpot/ASFramework
另外,我不确定您的约定是否适用于库,我的意思是文件名与实际代码无关,因此将类名与父类和接口组合是毫无意义的,因为您永远不会通过它扩展的类名包含文件。
如果你主要是对自动加载类依赖的解决方案感兴趣,那么我会采用PSR-0解决方案。
基本上您可以执行以下操作:

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{}

然后,您不需要事先包含,因为new HTTP_Input将自动加载以下内容:

  • HTTP/Input.php
  • HTTP/Protocol.php
  • Interface/Readable/Context.php
oyt4ldly

oyt4ldly3#

这个问题很难回答,因为这在很大程度上取决于你对自己的感觉。从我自己的实践来看,我只能建议使用自然的而不是技术性的名称。我几乎完全放弃了在类名中使用Interface或Abstract,放弃了使用C这样的简短版本。IA。我甚至现在都在试图阻止这样的情况。给类一个它应得的名字;).
找出某个东西是接口还是类本身是抽象的并不成问题。这在语言中已经存在了。所以额外地将其放入同一个类名中(对于父类来说这有点相同,但是你通常会自然地将子类命名为相关的)只是多余的。
最后你只需要用你的类的名字。所以找到好的名字而不是技术上的名字可能是底线。在这本书中有一个很好的章节叫做干净的代码,关于为你的类找到好的名字。

class Classname
Classname.php

接下来,使用名称空间(或者前缀形式的伪名称空间,如果由于PHP版本的原因而无法使用它们),并将类放在子目录中,使用一个文件=一个类。

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

经常重构并检查您的代码;).快乐编码;)

iqxoj9l9

iqxoj9l94#

我认为最好的东西是PSR-4。也是PSR-0弃用。
在我开始用PHP开发我的第一个严肃的项目之前,我已经做了大量的研究,并意识到最好的做法是遵循通用标准(PSR),当然我们是相当自由的,在某些情况下,我们可以为自己的项目弯曲一些部分。
每个PHP开发人员都必须了解PSR

3phpmpom

3phpmpom5#

除了使用框架之外,文件的命名没有任何规则。您可以随意命名您的文件,但是,如果您使用框架,则在尝试加载文件时可能会导致错误。
最好的实现是您在使用时感觉最好的实现。

相关问题