← К заметкам

Заметки

PHP 8: почему старые статические вызовы стали fatal error

В PHP 8 вызов нестатического метода через ClassName::method() приводит к ошибке. В старом проекте такой код мог долго жить с предупреждением и сломаться только после обновления PHP.

Если метод использует состояние объекта, создайте экземпляр:

$report_builder = new ReportBuilder();
$report = $report_builder->build($deal_id);

Добавлять static в объявление только ради исчезновения ошибки не стоит. Метод может обращаться к $this, зависеть от конструктора или участвовать в наследовании.

Если это класс ядра Битрикса, проверьте совместимость установленных обновлений с новой версией PHP. Правка сигнатуры в /bitrix создаст локальное расхождение с поставкой.

Отдельно проверьте callback-массивы: [ReportBuilder::class, 'build'] тоже не заменяет объект для нестатического метода. Нужен [$report_builder, 'build'].