Как настроить PHPStan, чтобы избежать ложных срабатываний, вызванных определенными классами и / или магическими методами?
При использовании PHP RedBean в проекте PHPStan сообщает о таких проблемах:
87 Access to an undefined property RedBeanPHP\OODBBean::$token.
Это происходит потому, что класс OODBBean в RedBean использует магические методы для логического связывания атрибутов класса со столбцами таблицы базы данных. AFAIK, нет ничего плохого в том, как RedBean реализует эту функцию.
Есть ли способ настроить PHPStan, чтобы игнорировать проблемы из RedBean (или любого другого класса)? Или игнорировать то, что может быть вызвано магическими методами?
1 ответ
У вас есть несколько вариантов в зависимости от того, что именно вам нужно. Для магических свойств:
- Если ваш класс может динамически содержать любое свойство, аналогично
stdClass
, вы можете поместить имя класса вuniversalObjectCratesClasses
параметр конфигурации Смотрите README. - Если ваш класс всегда содержит одни и те же магические свойства, вы можете определить их, добавив
@property
аннотации над классом. - Вы можете создать так называемое расширение отражения класса, которое описывает то, что ваш
__get
а также__set
метод логики для статического анализатора. Это надежный способ определить, какие именно свойства будут существовать для объекта в любой ситуации. Это делает PHPStan очень мощным, избегая ложных негативов - он по-прежнему будет сообщать о доступных свойствах, которые не определены даже волшебным образом. Смотрите README для более подробной информации.
Для магических методов применяется то же самое в 3. - вы можете написать расширение, которое описывает логику в __call
для статического анализатора. Смотрите README для более подробной информации.