X

Как исправить Cannot use 'Object' as class name as it is reserved в PHP?

В PHP версии выше 7.2 добавлено новое зарезервированное слово object. В связи с этим теперь его нельзя использовать в качестве имени класса, трейта, а так же в именовании пространства имен. Разбираемся как это исправить..

Способ 1. Не обновляемся до PHP 7.2, используем ветку PHP 7.1.x.

Один из самых простых способов - не использовать PHP версии выше или равной 7.2, т.к. именно с версии PHP 7.2 слово object стало зарезервированным. Разумеется, если есть возможность избавиться от него в коде, то именно так и надо сделать, однако бывают случаи, когда это или нецелесообразно или невозможно по причинам большого объема кода и сложной миграции.

Способ 2. Меняем object на другое имя класса

Если объемы кода не очень большие, то находим класс с именем Object и меняем его на что-то альтернативное, например BaseObject. Так сделали, например, в фреймворке Yii2. В этом случае, придется заменить все наследования от Object на BaseObject, т.е. если было

class A extends Object 
{
}

придется найти все такие наследования и поменять на

class A extends BaseObject 
{
}

Способ 3. Комбинация 1 и второго способа

Остаемся на версии 7.1.x и начинаем постепенную миграцию на 7.2 (а если уже наступил 2019 год, то возможно сразу на 7.3). Это наиболее приемлемый способ если у Вас большие объемы кода и все надо тщательно проверить.

Другие зарезервированные в PHP слова

Не рекомендуется использовать (запретят в будущем)

  • resource (с PHP 7)
  • mixed (с PHP 7)
  • numeric (с PHP 7)

Запрещено использовать, начиная с PHP7

  • int (с PHP 7)
  • float (с PHP 7)
  • bool (с PHP 7)
  • string (с PHP 7)
  • true (с PHP 7)
  • false (с PHP 7)
  • null (с PHP 7)
  • void (с PHP 7.1)
  • iterable (с PHP 7.1)
  • object (с PHP 7.2)

Запрещено использовать, начиная с PHP5

  • __DIR__ (с PHP 5.3)
  • __NAMESPACE__ (с PHP 5.3)
  • goto (с PHP 5.3)
  • namespace (с PHP 5.3)
  • __TRAIT__ (с PHP 5.4)
  • callable (с PHP 5.4)
  • insteadof (с PHP 5.4)
  • trait (с PHP 5.4)
  • finally (с PHP 5.5)
  • yield (с PHP 5.5)

Запрещено использовать

  • __CLASS__
  • __FILE__
  • __FUNCTION__
  • __LINE__
  • __METHOD__
  • __halt_compiler()
  • abstract
  • and
  • array()
  • as
  • break
  • case
  • catch
  • class
  • clone
  • const
  • continue
  • declare
  • default
  • die()
  • do
  • echo
  • else
  • elseif
  • empty()
  • enddeclare
  • endfor
  • endforeach
  • endif
  • endswitch
  • endwhile
  • eval()
  • exit()
  • extends
  • final
  • for
  • foreach
  • function
  • global
  • if
  • implements
  • include
  • include_once
  • instanceof
  • interface
  • isset()
  • list()
  • new
  • or
  • print
  • private
  • protected
  • public
  • require
  • require_once
  • return
  • static
  • switch
  • throw
  • try
  • unset()
  • use
  • var
  • while
  • xor
Категории: PHP
Тэги: Objectphp7