Main > PHP | Yii > Yii2: Fatal error, Cannot use 'Object' as class name

Yii2: Fatal error, Cannot use 'Object' as class name

03.11.2017 1 comment » Views: 7,072

Yii 2

При обновлении PHP на версию 7.2 столкнулся с ошибкой в "Fatal error, Cannot use 'Object' as class name" в Yii2...

Полный текст ошибки выглядит так:

Fatal error: Cannot use 'Object' as class name as it is reserved in /public_html/vendor/yiisoft/yii2/base/Object.php on line 77

Эта ошибка возникает т.к. в Yii2 до версии 2.0.13 для всех родительских классов используется класс Object. В PHP версии 7.2, слово object является зарезервированным и поэтому возникает конфликт. Обсуждение проблемы тут: [PHP7] Consider to deprecate yii\base\Object as object might become soft-reserved #7936

Решение - надо обновить Yii до новой версии, разумеется лучше всего до актуальной, но минимально до версии 2.0.13. (commit с исправлением проблемы)

Обновление до актуальной версии Yii2

Обновиться до актуальной версии можно с помощью composer:

посмотреть на какую версию вы обновились после выполнения этой команды, можно так

Если же Вам нужно обновиться до версии 2.0.13, чтобы начать использовать PHP 7.2 с минимальными исправлениями в Yii2 из-за обновлений, то делаем так как описано ниже.

Обновление до версии 2.0.13 минимально необходимой для PHP 7.2

В моем случае, при создании было использовано базовое приложение yii2-app-basic. К сожалению, на момент написания статьи, оно по прежнему в качестве зависимости использует Yii 2.0.5.

Поэтому, чтобы обновиться, открываем файл /composer.json, который находится в корне проекта, ищем там

и меняем на

теперь выполняем обновление, пишем в консоли

после обновления, ошибка должна пропасть

Ошибка осталась после обновления

В случае если Вы использовали в своих классах наследование от Object, например:

Вы получите такую же же ошибку даже после обновления, для того чтобы исправить, нужно найти все такие наследования и поменять Object на BaseObject, вот так

Класс где происходит конфликт будет указан в тексте возникающей ошибки, поэтому при проверки функ3циональности не составит труда найти такие классы. Однако, рекомендую сразу после обновления, поискать маску по содержимому в файлах следующих директорий, чтобы исправить проблемы сразу в момент обновления:

Ищем текст "\yii\base\Object"  в файлах *.php в директориях

  • /public_html/commands
  • /public_html/controllers
  • /public_html/models
  • /public_html/views

В случае если находим совпадения, идем в это место, и меняем \yii\base\Object на \yii\base\BaseObject.

На этом все, будут вопросы или трудности - пишите в комментарии

Author: | Rating: 4/5 | Tags: , ,

1 comment.

Write a comment
  1. Rajesh Reply
    16.01.2018 в 2:33 pm
    thank you so much.

Leave a Reply

Your email address will not be published. Required fields are marked *

Allowed HTML-tags: <a>, <code>, <i>, <em>, <strong>, <b>, <u>, <strike>