46

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

A\库\Session.php

namespace A\Library;

class Session { ... }

我的\应用\会话.php

namespace My\Application;

class Session { ... }

我的\应用程序\Facebook.php

namespace My\Application;
use A\Library\Session;

class Facebook { ... }

当我尝试运行应用程序时,我收到以下错误:

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

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

我能看到的唯一问题是另一个Session类存在于与该类相同的命名空间中Facebook,但由于它从未导入到 Facebook.php 文件中,我认为这根本不重要。

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

4

4 回答 4

33

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

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

如果它仍然与您有关,请为该错误投票。

于 2014-05-27T01:16:12.290 回答
28

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

使用 A\Library\Session;

是相同的:

use A\Library\Session as Session;

所以尝试使用类似的东西:

use A\Library\Session as AnotherSessionClassName;
于 2013-07-19T13:33:28.660 回答
12

我能看到的唯一问题是另一个 Session 类存在于与 Facebook 类相同的命名空间中,但由于它从未在 Facebook.php 文件中导入,我认为这根本不重要。

是的,这很重要。这就是为什么您不需要从同一个命名空间“导入”类的原因。如果您有来自不同命名空间的冲突名称,则需要为该类设置别名。

namespace My\Application;
use A\Library\Session as ASession; // choose a proper alias name here

class Facebook { ... }
于 2013-07-19T13:31:01.760 回答
0

我已阅读有关该问题的线程,但我在许多 PHP 版本(php 5.5、5.6、7.*、x32、x64、vc11、vc14、vc5)上进行了测试。我将 Laravel 与 Laragon 一起使用。但是,当我使用(并在http://localhost:8000php artisan serve打开服务器)构建服务器时,我遇到了“已使用某些类的名称空间”之类的问题。

我在使用和不使用 opcache 扩展的情况下进行了测试,但没有任何效果,然后我测试了 Laragon 提供的虚拟域......瞧,错误消失了,现在我可以正常工作了。我不知道发生了什么,我的命名空间没问题,我有一个别名,但相同的代码在许多机器上都没有问题(AWS、本地、产品、开发等),但只有在我的机器上我才遇到问题我描述了它。

因此,如果有人正在使用 Laravel (5.1) 并遇到此问题,请尝试使用 Laragon 的虚拟主机。

于 2019-04-17T14:51:18.020 回答