"Фатальная ошибка: не удается объявить класс" после обновления до 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
2 answers
Недостаточно данных, чтобы сказать определенно, однако я подозреваю, что opcache. Эта ошибка, на самом деле, возникает в opcache, поэтому я подозреваю, что до этого момента ошибка была скрыта одной из нескольких ошибок кода операции, вероятно #66773.
У вас на законных основаниях возникла проблема с загрузкой, которую необходимо устранить. Переименуйте класс, проверьте свои пространства имен и удалите все жесткие требования.
Вы могли бы восстановить прежнее поведение с помощью отключение/повторное включение opcache или возврат к версии 7.0.4, но на самом деле ошибка была замаскирована только определенной комбинацией автоматической загрузки и opcache. Действительно, только по случайности проблема до сих пор оставалась незамеченной, и только по случайности вы сможете снова замаскировать ее.
Поэтому лучший способ - устранить проблему.
Ну, по-видимому, я был настолько ослеплен тем фактом, что ошибка начала возникать после обновления, что я проигнорировал ее, хотя она была прямо перед моими глазами.
Это первые несколько строк рассматриваемого класса (и, по-видимому, куча других классов):
<?php
namespace Plugins\Users;
use FW\Utility\Models\Plugins\Plugin;
class Plugin extends Plugin {
Как вы, и, наконец, я, ясно видим, имя класса Plugin
неоднозначно, но не было в 7.0.4, что странно и, вероятно, вызвано ошибкой , описанной в бишоп's ответ
Наверное, мне следовало послушать Махавити, ха.