我正在使用PHP 5.4,并且具有类似于以下的PSR-0类结构。
:一种\库\ session.php文件:
namespace A\Library;
class Session { ... }
我\应用程序\ session.php文件:
namespace My\Application;
class Session { ... }
我\应用程序\ Facebook.php :
namespace My\Application;
use A\Library\Session;
class Facebook { ... }
当我尝试运行该应用程序时,出现以下错误:
无法使用A \ Library \ Session作为会话,因为该名称已在My \ Application \ Facebook.php中使用
尽管不是,但至少不在此文件中。 Facebook.php文件仅声明Facebook
类,并且只导入一个Session
类,A\Library
类。
我能看到的唯一问题是另一个Session
类与Facebook
类存在于同一名称空间中,但由于它从未在Facebook.php文件中导入,我认为它没有很重要。
我错了(在这种情况下请指向相关文档),或者这是一个错误?
答案 0 :(得分:29)
PHP中确认的某个错误可能会影响您看到的行为。它应该是致命错误,但启用了opcache后,它仍然可以完美执行。
https://bugs.php.net/bug.php?id=66773
如果仍然关注您,请投票支持该错误。
答案 1 :(得分:27)
不,这不是错误。如Using namespaces: Aliasing/Importing
中所述使用A \ Library \ Session;
与:
相同use A\Library\Session as Session;
所以尝试使用类似的东西:
use A\Library\Session as AnotherSessionClassName;
答案 2 :(得分:12)
我能看到的唯一问题是,另一个Session类存在于 与Facebook类相同的命名空间,但因为它从未导入过 Facebook.php文件,我认为这根本不重要。
是的,这很重要。这就是您不需要从同一名称空间“导入”类的原因。如果来自不同名称空间的名称存在冲突,则需要为该类添加别名。
namespace My\Application;
use A\Library\Session as ASession; // choose a proper alias name here
class Facebook { ... }
答案 3 :(得分:0)
我已经阅读了有关该问题的主题,但是我在许多PHP版本(php 5.5、5.6、7。*,x32,x64,vc11,vc14,vc5)上进行了测试。我将Laravel与Laragon一起使用。但是,当我使用php artisan serve
构建服务器(并在http://localhost:8000上打开服务器)时,出现了“已使用某些Class的名称空间”之类的问题。
我在有和没有opcache扩展的情况下进行了测试,但是没有任何效果,然后我测试了Laragon提供的虚拟域,并且……瞧,错误消失了,现在我可以正常工作了。我不知道发生了什么,我的命名空间还可以,我有一个别名,但是相同的代码可以在很多机器上正常工作(AWS,本地,产品,开发等),但是只有在我的机器上,我才遇到问题我描述了它。
因此,如果有人正在使用Laravel(5.1)并遇到此问题,请尝试使用Laragon虚拟主机。