В 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:
Спасибо!
Та инспекция работает отлично здесь (доказательство).
Пожалуйста, попробуй Code | Inspect Code...
в этом файле — это приведет к повторному анализу этого файла с нуля. Лучше?
Если ничего — пожалуйста File | Invalidate Caches...
и перезапустите IDE
Постскриптум
Если вы заинтересованы в проведение этой проверки только для всего проекта — использование Code | Run Inspection by Name...
— это намного быстрее, чем делать полный Inspect Code
для каждого файла.
Статический анализ кода может указывать на некоторые потенциальные ошибки. Это никогда не гарантирует, что ошибок нет, и не стоит на это полагаться.
В качестве практического совета вы можете искать все статические вызовы с чем-то вроде
grep -roh "\w\+::.\+\?("
и проанализируйте список самостоятельно.
Измените сообщение об ошибке в вашем файле php.ini
error_reporting = E_ALL & ~ E_NOTICE & ~ E_WARNING & ~ E_STRICT & ~ E_DEPRECATED