自动装入包含与导入的类同名的类的包



我有一个项目,其中包含一个PHP文件,该文件定义了一个名为Response的类,并且我正在通过作曲家自动加载Guzzle(这也定义了它自己的Response类)

问题是我冒着PHP可能会对它应该使用哪个Response类感到困惑的风险吗?如果我单独使用 Response,除非我做一个use语句,否则我不会冒它会以某种方式获取 Guzzle 类的风险,对吗?

我认为这很好,除非我做use声明,但我只是想确定一下。

你没有任何冲突的风险,这就是PHP命名空间存在的原因!
尽管两个类的简称相同,但它们的 FQCN(完全限定类名)不同,因此不会混淆。

Guzzle Response课是:

GuzzleHttpMessageResponse

您的课程将是这样的:

MyAppResponse 

(或者如果你没有为它设置命名空间,就Response,这是一种非常糟糕的做法!

您可以在类中use其中任何一个,甚至可以同时使用两者,只要为其中一个设置别名即可:

use MyAppResponse;
use GuzzleHttpMessageResponse as GuzzleResponse;
// ...
$myResponse = new Response();
$guzzleResponse = new GuzzleResponse();

只要类有单独的命名空间。

作曲家(及其自动编辑器)将使用类名解析命名空间。因此,如果您使用自己的类("Class1")和具有相同类名("类名")的外来类("Class2"),则具有不同的命名空间,例如

namespace MeMyPackageClassname

namespace GuzzleClassname

你会没事的。如果要创建其中一个类的实例,只需键入完整的限定命名空间,例如

$var1 = new MeMyPackageClassname();

相关内容

  • 没有找到相关文章

最新更新