不能使用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 { ... }