我有一个项目,其中包含一个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();