如何命名命名空间类的文件?

时间:2014-10-27 作者:Rarst

WP Core Handbook > PHP Coding Standards > Naming Conventions 建议使用类命名文件:

类文件名应基于class- 例如,将类名中的前缀和下划线替换为连字符WP_Error 成为:

class-wp-error.php
虽然从本节的措辞来看,它主要用于核心用途,但总体编码风格通常适用于(而且在我看来应该适用)第三方WP代码。

然而,由于core不支持名称空间(PHP 5.2,ugh),这并不能解释这种情况。

从开发人员方便的角度来看,实现它的实际方法是什么?自动装弹机支持?

我可以看到多种替代方法:

完全忽略命名空间,在文件名中包含命名空间,使用命名空间作为文件夹级别,完全使用替代命名方案,如PSR

4 个回复
SO网友:fuxia

首先,忽略class- 前缀这源于WordPress的纯过程代码方法,类被用作过程代码的容器,而不是真正的对象,并且大多数文件根本不包含类或类和其他代码。当所有文件只包含一个类而不包含其他类时,这就没有意义了<如果你要遵循这种模式,就必须使用interface-foo.phptrait-bar.php. 这不仅看起来很可笑,而且会使自动加载变得不必要。

根据我的经验,分离名称空间和类/接口/特征名称的最简单方法是将名称空间分配给目录名,将类名分配给文件名。这使得将请求的类映射到自动加载器中的给定文件结构非常容易:Just convert\\/, 追加.php 并加载文件。

这也使得缓存查找变得很容易:对于每个目录/命名空间,您可以在第一次请求该目录时获取所有现有文件,对于以后的调用,您可以重用该文件名列表,而无需请求file_exists() 每一次。

SO网友:Pablo S G Pacheco

我已经为这个需求创建了一个类,它与PSR-4兼容并遵循Wordpress编码标准。

您可以在此处访问:https://github.com/pablo-pacheco/wp-namespace-autoloader

解释就在这里,但基本上这是作曲家的依赖关系。您只需在项目中要求它:

"require": {    
    "pablo-pacheco/wp-namespace-autoloader": "dev-master"
}
然后给全班打电话

<?php
new \\WP_Namespace_Autoloader( array(    
    \'directory\'   => __DIR__,       // Directory of your project. It can be your theme or plugin. __DIR__ is probably your best bet.    
    \'namespace\'   => __NAMESPACE__, // Main namespace of your project. E.g My_Project\\Admin\\Tests should be My_Project. Probably if you just pass the constant __NAMESPACE__ it should work     
    \'classes_dir\' => \'src\',         // (optional). It is where your namespaced classes are located inside your project. If your classes are in the root level, leave this empty. If they are located on \'src\' folder, write \'src\' here 
) );

SO网友:cfoellmann

我通常会选择你的下半部分:

使用名称空间作为文件夹级别,同时使用其他命名方案,如PSR,如果使用composer注册PSR-4自动加载器,则可以遵循WP命名约定。映射到文件夹的命名空间,该文件夹可以包含下划线,而文件的名称与类类似,类也可以包含下划线。例如:

<Namespace_Dir>/Class_Name.php
当WP转到php 5.3+(这最终必须发生,对吗?!)准则需要更新。由于PSR-0已被弃用,如果不需要,至少应推荐PSR-4。

SO网友:guillaume.molter

pablo-s-g-pacheco的解决方案对我起到了作用,它依靠composer自动加载,但与WordPress编码标准兼容,然而Github repo的url是:

https://github.com/pablo-sg-pacheco/wp-namespace-autoloader

包名称为:

"require": {    
    "pablo-sg-pacheco/wp-namespace-autoloader": "dev-master"
}
最后,您还需要将以下内容添加到作曲家中。json,因为该包在PackageGist上不可用:

"repositories": [{
    "type": "vcs",
    "url": "https://github.com/pablo-sg-pacheco/wp-namespace-autoloader"
}] 

结束

相关推荐

Infinite blog loop

我不明白为什么我会收到一个无限的博客帖子。当我注释内容中的循环代码时。php,它不再循环。我正在尝试根据post格式发布项目,但到目前为止失败了。如果我需要提供更多信息,请告诉我!我很感激。所容纳之物php:<?php /** * The default template for displaying content. Used for both single and index/archive/search. * * @subpackage Foundatio