PhpStorm — Как обнаружить ошибку PHP «Нестатический метод не должен вызываться статически»?

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

Например:

<?php

class Example
{
public function foo() {
return "Foo";
}

public static function bar() {
return "Bar";
}
}

$ex = new Example();

// Non-static call
echo $ex->bar();

// Static call on a non-static method
// PHP Error "Strict standards: Non-static method should not be called statically"// ERROR NOT DETECTED BY PHPSTORM!
echo Example::foo();

Последняя строка сгенерирует эту ошибку PHP (это логика):
введите описание изображения здесь

В настоящее время я работаю над большим приложением PHP, которое статически вызывает в некоторых файлах PHP нестатические методы. Это не было проблемой с очень старой версией PHP, но мы решили перейти на последнюю версию PHP.

Вручную проверьте все файлы проекта, чтобы определить, что этот неправильный синтаксис будет слишком длинным (+ 1000 файлов)!

Встроенные функции проверки кода в PhpStorm не обнаруживают ошибки такого типа в анализируемом исходном коде. Зачем? Должен ли я что-то настроить? Как?

Ниже моя конфигурация проверки PHP-кода в PhpStorm:

введите описание изображения здесь

Спасибо!

3

Решение

Та инспекция работает отлично здесь (доказательство).

  1. Пожалуйста, попробуй Code | Inspect Code... в этом файле — это приведет к повторному анализу этого файла с нуля. Лучше?

  2. Если ничего — пожалуйста File | Invalidate Caches... и перезапустите IDE


Постскриптум
Если вы заинтересованы в проведение этой проверки только для всего проекта — использование Code | Run Inspection by Name... — это намного быстрее, чем делать полный Inspect Code для каждого файла.

5

Другие решения

Статический анализ кода может указывать на некоторые потенциальные ошибки. Это никогда не гарантирует, что ошибок нет, и не стоит на это полагаться.

В качестве практического совета вы можете искать все статические вызовы с чем-то вроде

grep -roh "\w\+::.\+\?("

и проанализируйте список самостоятельно.

1

Измените сообщение об ошибке в вашем файле php.ini

error_reporting = E_ALL & ~ E_NOTICE & ~ E_WARNING & ~ E_STRICT & ~ E_DEPRECATED

0