tgoop.com/phpproglib/5079
Last Update:
Улучшения в PHPStan для анализа типов
Здесь показаны достижения в области улучшения анализа типов в PHPStan, выполненные за последние годы.
Проблема типов mixed
Тип mixed используется, когда информация о типе отсутствует, что может приводить к ошибкам анализа или ложным срабатываниям. Работа автора была сосредоточена на сужении таких типов, чтобы повысить точность анализа.
Узкие типы на основе условий
PHPStan давно использует метод «вычитания» типов. Вместо того чтобы описывать, чем является переменная, анализ строится на исключении того, чем она не является. Например:
Если переменная проверяется на истинность (if ($mixed)
), исключаются ложные значения.
Если переменная ложна (if (!$mixed)
), исключаются истинные значения.
Этот подход расширен на такие операции, как приведение типов в условиях.
Примеры улучшений
🔸Приведение типов: Приведение переменной к числу, строке или булевому типу теперь лучше учитывается при анализе. Например, int
, bool
или string
помогают уточнять тип переменной в конкретных контекстах.
🔸Сравнение строк: Улучшена работа с функциями вроде strlen() и substr(). Сравнение длины строки или её части теперь помогает определять, является ли строка пустой, ложной или непустой.
🔸isset() и массивы: Анализ использования isset()
теперь точнее определяет тип ключа массива. Например, isset($array[$mixed])
исключает невозможные значения для $mixed.
🔸IIFE (immediate-invoked-function-expression): Этот подход, популярный в JavaScript, иногда используется и в PHP. PHPStan научился корректно анализировать изменения типов внутри таких функций.
Новые phpdoc-типы
Для улучшения анализа в PHPStan добавлены новые аннотации:non-falsy-string
: строка, которая не является ложным значением.@param-out
: уточняет, как изменяется переданный по ссылке параметр.value-of
и другие.
Эти аннотации помогают разработчикам и инструментам анализировать код быстрее и точнее.
Расширения PHPStan
В PHPStan появилась возможность учитывать контекст вызовов. Например, расширения для анализа preg_match()
теперь используют дерево синтаксиса регулярных выражений. Также разработан инструмент phpstan-dba для анализа запросов к базе данных с учётом схемы данных.
BY Библиотека пхпшника | PHP, Laravel, Symfony, CodeIgniter
Share with your friend now:
tgoop.com/phpproglib/5079