Как настроить PHPStan, чтобы избежать ложных срабатываний, вызванных определенными классами и / или магическими методами? - PullRequest
2 голосов
/ 08 марта 2019

При использовании PHP RedBean в проекте PHPStan сообщает о таких проблемах:

87     Access to an undefined property RedBeanPHP\OODBBean::$token.

Это происходит потому, что класс OODBBean RedBean использует магические методы для логического связывания атрибутов класса со столбцами таблицы базы данных. AFAIK, нет ничего плохого в том, как RedBean реализует эту функцию.

Есть ли способ настроить PHPStan, чтобы игнорировать проблемы из RedBean (или любого другого класса)? Или игнорировать, что может быть вызвано магическими методами?

1 Ответ

2 голосов
/ 08 марта 2019

У вас есть несколько вариантов в зависимости от того, что именно вам нужно. Для магических свойств:

  1. Если ваш класс может динамически содержать какое-либо свойство, аналогично stdClass, вы можете поместить имя класса в параметр конфигурации universalObjectCratesClasses. См. README .
  2. Если ваш класс всегда содержит одни и те же магические свойства, вы можете определить их, добавив @property аннотации над классом.
  3. Вы можете создать так называемое расширение отражения класса, которое описывает логику метода __get и __set для статического анализатора. Это надежный способ определить, какие именно свойства будут существовать для объекта в любой ситуации. Это делает PHPStan очень мощным, избегая ложных негативов - он по-прежнему будет сообщать о доступных свойствах, которые не определены даже волшебным образом. Подробнее см. README .

Для магических методов применяется то же самое в 3. - вы можете написать расширение, описывающее логику в __call для статического анализатора. См. README для получения более подробной информации.

...