"Фатальная ошибка: не удается объявить класс" после обновления до PHP 7.0.8


Я использовал PHP 7.0.4, и все шло гладко, и я только что обновился до PHP 7.0.8, и я начал получать ошибки, подобные этой, повсюду.

Неустранимая ошибка: Не удается объявить плагины класса\Пользователи\Плагин, потому что имя уже используется в/var/www/html/plugins/Users/Plugin.php в строке 8

Кто-нибудь имеет представление о том, что происходит, я читал журналы изменений, но это обновление исправлений, которое не должно нарушаться что-нибудь?

Кроме того, если решение этой проблемы не найдено, как я могу вернуться к версии 7.0.4? (Я использую ubuntu 16.04, и я только что обновился до версии point)

Чтобы суммировать комментарии до сих пор:

  • Я пытался отключить opcache, но это не решило проблему
  • Я использую автозагрузчик композитора - я нигде не использую require или include
  • Эта ошибка возникает для множества классов, так что это явно не проблема с кодом (с моей стороны), кроме того, код работал до того, как я обновился до версии 7.0.8
Author: php_nub_qq, 2016-07-28

2 answers

Недостаточно данных, чтобы сказать определенно, однако я подозреваю, что opcache. Эта ошибка, на самом деле, возникает в opcache, поэтому я подозреваю, что до этого момента ошибка была скрыта одной из нескольких ошибок кода операции, вероятно #66773.

У вас на законных основаниях возникла проблема с загрузкой, которую необходимо устранить. Переименуйте класс, проверьте свои пространства имен и удалите все жесткие требования.

Вы могли бы восстановить прежнее поведение с помощью отключение/повторное включение opcache или возврат к версии 7.0.4, но на самом деле ошибка была замаскирована только определенной комбинацией автоматической загрузки и opcache. Действительно, только по случайности проблема до сих пор оставалась незамеченной, и только по случайности вы сможете снова замаскировать ее.

Поэтому лучший способ - устранить проблему.

 4
Author: bishop, 2016-07-28 13:10:51

Ну, по-видимому, я был настолько ослеплен тем фактом, что ошибка начала возникать после обновления, что я проигнорировал ее, хотя она была прямо перед моими глазами.

Это первые несколько строк рассматриваемого класса (и, по-видимому, куча других классов):

<?php

namespace Plugins\Users;

use FW\Utility\Models\Plugins\Plugin;

class Plugin extends Plugin {

Как вы, и, наконец, я, ясно видим, имя класса Plugin неоднозначно, но не было в 7.0.4, что странно и, вероятно, вызвано ошибкой , описанной в бишоп's ответ

Наверное, мне следовало послушать Махавити, ха.

 1
Author: php_nub_qq, 2017-05-23 11:46:40