【问题标题】:"Fatal error: Cannot declare class" after upgrading to PHP 7.0.8升级到 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 但我停止了它并且错误仍然存​​在。

标签: php ubuntu 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,呵呵。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-10-17
      • 2014-11-07
      • 2016-11-05
      • 1970-01-01
      • 2013-07-01
      • 2017-11-25
      • 2015-06-14
      相关资源
      最近更新 更多