自动加载包,其中包含同名类为进口类

问题描述:

我有一个项目,包括定义一个类名为Response,我自动加载通过作曲家狂饮(也限定它自己的Response类)的PHP文件自动加载包,其中包含同名类为进口类

现在的问题是,我是否会面临PHP应该使用哪个Response类而感到困惑的风险?如果我自己使用Response,那么我不会冒风险,它会以某种方式获取Guzzle类,除非我的use陈述正确吗?

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

+1

从基本上讲,只要类有自己的唯一命名空间 – unherz

您没有冲突的任何风险,这就是为什么PHP Namespaces存在!
尽管这两个类别的短名称都相同,但它们的FQCN(完全限定类名称)是不同的,所以不会有混淆的可能性。

狂饮的Response类是:

\Guzzle\Http\Message\Response 

你的类会是这样的:

\MyApp\Response 

(或只是\Response如果你没有为它设置一个命名空间,这是一个非常糟糕的练习!)

你可以use其中任何一个在你的课堂,或者甚至两个,只要你为其中之一设置别名:

use \MyApp\Response; 
use \Guzzle\Http\Message\Response as GuzzleResponse; 

// ... 

$myResponse = new Response(); 
$guzzleResponse = new GuzzleResponse(); 

只要类有个别的命名空间。

Composer(及其autolaoder)将使用类名解析名称空间。 因此,如果您使用具有不同名称空间的自己的类(“Class1”)和具有相同类名(“Classname”)的外部类(“Class2”),例如

namespace \Me\MyPackage\Classname

namespace \Guzzle\Classname

,你将被罚款。如果你想创建其中一个类的实例,只需输入完整限定名称空间,例如

$var1 = new \Me\MyPackage\Classname();