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

#php #redbean #phpstan

#php #redbean #phpstan

Вопрос:

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

 87     Access to an undefined property RedBeanPHPOODBBean::$token.
  

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

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

Ответ №1:

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

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

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

Комментарии:

1. universionObjectCratesClasses был именно тем, что я искал.