升级到 PHP 7.0.8 后出现“致命错误:无法声明类”

Posted

技术标签:

【中文标题】升级到 PHP 7.0.8 后出现“致命错误:无法声明类”【英文标题】:"Fatal error: Cannot declare class" after upgrading to PHP 7.0.8 【发布时间】:2016-12-02 05:00:45 【问题描述】:

我使用的是 php 7.0.4,一切运行顺利,我刚刚升级到 PHP 7.0.8,我开始收到类似这样的错误。

致命错误:无法声明类 Plugins\Users\Plugin,因为该名称已在第 8 行的 /var/www/html/plugins/Users/Plugin.php 中使用

有谁知道发生了什么,我一直在阅读更改日志,但这是一个补丁更新,它应该不会破坏任何东西?

另外,如果这个问题没有找到解决方案,我该如何降级回7.0.4? (我使用的是 ubuntu 16.04,刚刚升级到了单点版本)

总结到目前为止的 cmets:

我已尝试禁用 opcache 这并没有解决问题 我正在使用 composer 的自动加载器 - 我没有在任何地方使用 requireinclude 这个错误发生在很多类上,所以这显然不是代码问题(就我而言),而且在我升级到 7.0.8 之前代码就可以正常工作

【问题讨论】:

愿意分享有问题的代码吗? @Machavity 这不是一个单一的类,如果我从代码中删除这个类,那么另一个类会抛出这个错误,这是 PHP 中的问题,因为正如我所说,直到 30 分钟前它都运行良好. 错误信息似乎很清楚 你在运行 opcache 吗?有一个长期存在的错误会默默地抑制同样的致命错误。 @roippi 我正在运行 opcache 但我停止了它并且错误仍然存​​在。 【参考方案1】:

没有足够的数据可以明确地说,但是我怀疑 opcache。那个错误,实际上是originates in opcache,所以我怀疑直到现在这个错误已经被几个操作码错误之一隐藏了,可能是#66773。

您确实有需要修复的自动加载问题。重命名类,检查命名空间,并删除任何硬性要求。

可能可以通过禁用/重新启用 opcache 或恢复到 7.0.4 来恢复以前的错误行为,但实际上该错误仅被自动加载和 opcache 的特定组合所掩盖。事实上,直到现在才发现问题只是偶然,而您可以再次掩盖它也只是偶然。

所以最好的办法是解决问题。

【讨论】:

【参考方案2】:

好吧,显然我被升级后开始出现错误这一事实蒙蔽了双眼,以至于我忽略了它,即使它就在我的眼前。

这些是相关类的前几行(显然还有一堆其他类):

<?php

namespace Plugins\Users;

use FW\Utility\Models\Plugins\Plugin;

class Plugin extends Plugin 

正如你,最后我可以清楚地看到,类名Plugin 是模棱两可的,但不在 7.0.4 中,这很奇怪,可能是由 bishop 中描述的 bug 引起的sanswer

我想我应该听Machavity,呵呵。

【讨论】:

以上是关于升级到 PHP 7.0.8 后出现“致命错误:无法声明类”的主要内容,如果未能解决你的问题,请参考以下文章

致命错误:无法声明类 Locale,因为该名称已在

phpMyAdmin:PHP 致命错误 - 无法重新声明 PMA_checkLink()

致命错误:无法声明类错误,因为该名称已在使用中

PHP致命错误:无法重新声明类

PHP致命错误无法打开所需文件

PHP致命错误:无法访问空属性