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

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

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

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

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

1 ответ

Решение

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

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

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

Другие вопросы по тегам