我有一个包含PHP文件的项目,该文件定义了一个名为Response
的类,我通过composer自动加载Guzzle(也定义了它自己的Response
类)
问题是我是否存在PHP可能会混淆应该使用哪个Response
类的风险?如果我单独使用Response
我不会冒险以某种方式获取Guzzle类,除非我做了use
语句吗?
我认为除非我做use
陈述,否则我没关系,但我只想确定。
答案 0 :(得分:1)
您不会有任何冲突风险,这就是PHP Namespaces存在的原因!
虽然两个类的短名称是相同的,但他们的 FQCN (完全合格的班级名称)却不同,所以不会有混淆的可能性。
Guzzle的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();
答案 1 :(得分:0)
只要类具有单独的命名空间。
Composer(及其autolaoder)将使用classname解析命名空间。 因此,如果您使用自己的类(“Class1”)和具有相同类名(“Classname”)且具有不同名称空间的外部类(“Class2”),例如
namespace \Me\MyPackage\Classname
namespace \Guzzle\Classname
$var1 = new \Me\MyPackage\Classname();