PHP 命名空间 Class 命名约定
PHP Namespace Class Naming Convention
我目前关注 PSR-2 和 PSR-4。在尝试列举一些 类 时,我 运行 陷入了一个小困境。这是一个例子。
我有一个基本的 REST 客户端,\Vendor\RestClient\AbstractClient
。我有这个抽象客户端的两个实现:
\Vendor\GoogleClient\GoogleClient
\Vendor\GithubClient\GithubClient
客户端的命名类是否多余,因为命名空间已经指定了域?我应该改为命名我的 类:
\Vendor\GoogleClient\Client
\Vendor\GithubClient\Client
这意味着客户端代码将始终使用如下内容:
use Vendor\GoogleClient\Client;
$client = new Client();
这比以下更简洁:
use Vendor\GoogleClient\GoogleClient;
$client = new GoogleClient();
但是第一个选项允许我们仅通过更改 use 语句来轻松交换实现。
PSR4 指定 Interfaces
和 AbstractClasses
应分别以 Interface
为后缀并以 Abstract
为前缀,但它没有说明特定领域 prefixes/suffixes .任何 opinions/suggestions?
这完全取决于您,因为 PSR 中没有对此的命名约定。但是你在做决定时要记住的是,如果你决定
\Vendor\GoogleClient\Client
\Vendor\GithubClient\Client
并且您想同时使用它们(use
)
use Vendor\GoogleClient\Client;
use Vendor\GithubClient\Client;
$client = new Client();
你会 运行 出错,因为 Client
不是唯一的。
当然你仍然可以像
一样一次使用它们
use Vendor\GoogleClient\Client as GoogleClient;
use Vendor\GithubClient\Client as GithubClient;
$client1 = new GoogleClient();
$client2 = new GithubClient();
或没有use
喜欢
$client1 = new Vendor\GoogleClient\Client();
$client2 = new Vendor\GithubClient\Client();
但是如果你计划程序员可以通过更改
只需一行就可以轻松地在他的代码中切换客户端
use Vendor\GoogleClient\Client;
$client = new Client();
到
use Vendor\GithubClient\Client;
$client = new Client();
这比将所有 new GoogleClient()
语句也更改为 new GithubClient()
容易得多。
结论
你看这个决定在很大程度上取决于你自己的需要和喜好。自己决定哪一个更适合你。
请注意,还请考虑使用以下方式进行重构:
\Vendor\Client\Google
\Vendor\Client\GitHub
逻辑是:从最不具体到最具体。
话虽如此,但通常这是不可能的。
我目前关注 PSR-2 和 PSR-4。在尝试列举一些 类 时,我 运行 陷入了一个小困境。这是一个例子。
我有一个基本的 REST 客户端,\Vendor\RestClient\AbstractClient
。我有这个抽象客户端的两个实现:
\Vendor\GoogleClient\GoogleClient
\Vendor\GithubClient\GithubClient
客户端的命名类是否多余,因为命名空间已经指定了域?我应该改为命名我的 类:
\Vendor\GoogleClient\Client
\Vendor\GithubClient\Client
这意味着客户端代码将始终使用如下内容:
use Vendor\GoogleClient\Client;
$client = new Client();
这比以下更简洁:
use Vendor\GoogleClient\GoogleClient;
$client = new GoogleClient();
但是第一个选项允许我们仅通过更改 use 语句来轻松交换实现。
PSR4 指定 Interfaces
和 AbstractClasses
应分别以 Interface
为后缀并以 Abstract
为前缀,但它没有说明特定领域 prefixes/suffixes .任何 opinions/suggestions?
这完全取决于您,因为 PSR 中没有对此的命名约定。但是你在做决定时要记住的是,如果你决定
\Vendor\GoogleClient\Client
\Vendor\GithubClient\Client
并且您想同时使用它们(use
)
use Vendor\GoogleClient\Client;
use Vendor\GithubClient\Client;
$client = new Client();
你会 运行 出错,因为 Client
不是唯一的。
当然你仍然可以像
一样一次使用它们use Vendor\GoogleClient\Client as GoogleClient;
use Vendor\GithubClient\Client as GithubClient;
$client1 = new GoogleClient();
$client2 = new GithubClient();
或没有use
喜欢
$client1 = new Vendor\GoogleClient\Client();
$client2 = new Vendor\GithubClient\Client();
但是如果你计划程序员可以通过更改
只需一行就可以轻松地在他的代码中切换客户端use Vendor\GoogleClient\Client;
$client = new Client();
到
use Vendor\GithubClient\Client;
$client = new Client();
这比将所有 new GoogleClient()
语句也更改为 new GithubClient()
容易得多。
结论
你看这个决定在很大程度上取决于你自己的需要和喜好。自己决定哪一个更适合你。
请注意,还请考虑使用以下方式进行重构:
\Vendor\Client\Google
\Vendor\Client\GitHub
逻辑是:从最不具体到最具体。
话虽如此,但通常这是不可能的。