不能使用X作为Y,因为名称已被使用,即使它不是

我正在使用PHP 5.4,并具有类似于以下的PSR-0类结构。

A \ Library \ Session.php

namespace A\Library; class Session { ... } 

My \ Application \ Session.php

 namespace My\Application; class Session { ... } 

My \ Application \ Facebook.php

 namespace My\Application; use A\Library\Session; class Facebook { ... } 

当我尝试运行该应用程序时,出现以下错误:

因为该名称已在My \ Application \ Facebook.php中使用,所以无法将A \ Library \ Session用作会话

即使它不是,至less不在这个文件中。 Facebook.php文件只声明Facebook类,并且只导入一个Session类, A\Library之一。

我能看到的唯一问题是另一个Session类与Facebook类存在于同一个命名空间中,但是因为它从来没有被导入到Facebook.php文件中,所以我认为它根本就不重要。

我错了吗(在这种情况下,请指出相关文档),还是这是一个错误?

有一个在PHP中确认的错误,可能会影响你看到的行为。 它应该是致命的错误,但启用opcache,它仍然可以执行完美。

https://bugs.php.net/bug.php?id=66773

如果它仍然关心你,请投票的错误。

不,这不是一个错误。 正如使用名称空间中所述:别名/导入

使用A \ Library \ Session;

是相同的:

 use A\Library\Session as Session; 

所以请尝试使用类似于:

 use A\Library\Session as AnotherSessionClassName; 

我能看到的唯一问题是另一个Session类与Facebook类存在于同一个命名空间中,但是因为它从来没有被导入到Facebook.php文件中,所以我认为它根本就没有关系。

是的,这很重要。 这就是为什么你不需要从相同的命名空间“导入”类。 如果来自不同名称空间的名称有冲突,则需要别名类。

 namespace My\Application; use A\Library\Session as ASession; // choose a proper alias name here class Facebook { ... }