自动加载包,其中包含同名类为进口类
问题描述:
我有一个项目,包括定义一个类名为Response
,我自动加载通过作曲家狂饮(也限定它自己的Response
类)的PHP文件自动加载包,其中包含同名类为进口类
现在的问题是,我是否会面临PHP应该使用哪个Response
类而感到困惑的风险?如果我自己使用Response
,那么我不会冒风险,它会以某种方式获取Guzzle类,除非我的use
陈述正确吗?
我认为这很好,除非我做use
声明,但我只是想确定。
答
您没有冲突的任何风险,这就是为什么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();
从基本上讲,只要类有自己的唯一命名空间 – unherz