无法声明接口,因为名称已在使用中


12

在我的新模块中创建一个简单的界面之后。我输入bin / magento setup:di:compile,但收到一条错误消息,说该名称已被使用。

这是我的代码:

namespace Company\Test\Api;

/*
 *  @api
 */
interface XyzInterface {
    public function getSomething();
}

然后我得到这个错误:

Repositories code generation... 1/7 [====>-----------------------]  14% 2 secs 52.0 MiBPHP 
Fatal error:  Cannot declare interface Company\Test\Api\XyzInterface, because the name is already in use in .../app/code/Company/Test/Api/XyzInterface.php on line 13

该行是“接口XyzInterface”,我不确定自己在做什么错。


1
您能否运行带有-vvv选项的命令以查看堆栈跟踪?可能由于某种原因该文件被两次包含。
BuskaMuza

它仅显示“ PHP致命错误”
Nelly

您也可以尝试启用xdebug。我认为这应该有助于显示回溯。
BuskaMuza

1
我也因为输入“命名空间”类的类型错误而收到此错误
Ansyori

Answers:


36

今天,我收到了相同类型的错误:

PHP致命错误:无法声明类Class \ Name \ Here,因为该名称已在第100行的/var/www/m2/magento2/app/code/path/to/the/class.php中使用

第100行是文件的结尾。

经过大约4个小时的调试,我确实找到了原因:名称空间声明中的打印错误。直到最后一刻,我都不相信这是名称声明中的印刷错误,但是当我重新重写所有名称时,该错误消失了。这篇文章非常有帮助:

我会挠头一段时间,想知道发生了什么,最终意识到是这样的

Pulsetorm

即我输入了一个名称空间名称,当初始自动加载加载类文件时,它不会定义要查找的类,然后第二个自动加载器(通常是Composer)再次加载它,并尝试重新定义相同的名称不正确的课程。

即,Magento想要上课

Pulsestorm\Helloworld\Observers\Block

但我定义

Pulsetorm\Helloworld\Observers\Block

多亏了错误的命名空间。

谢谢艾伦·风暴():

更新:

该错误的另一种类型是不正确的名称空间声明,缺少名称空间的一部分,如以下示例所示:

错误:

存储库代码生成... 1/7 [====> -----------------------] 14%1秒50.0 MiBPHP致命错误:无法声明类Migration \ Step \ Version11410to2000Test,因为该名称已在/var/www/vhosts/rwld/vendor/magento/data-migration-tool/tests/unit/testsuite/Migration/Step/UrlRewrite/Version11410to2000Test.php中使用109行

第109行是文件的末尾。

在文件中,vendor/magento/data-migration-tool/tests/unit/testsuite/Migration/Step/UrlRewrite/Version11410to2000Test.php我们找到了Migration\Step正确的名称空间,Migration\Step\UrlRewrite因为该类的路径为Migration/Step/UrlRewrite。将名称空间更改为Migration/Step/UrlRewrite错误后,错误消失了。


1
我遇到了同样的问题,这是个疯狂的问题
Hamza在2016年

+1解决名称空间问题。我浪费了2个小时。非常感谢!
wezzy

1
也只想补充一点,在命名目录时要格外小心,因为大小写必须匹配-这可能又浪费了两个小时!
Smithee
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.