TGViewer
Библиотека пхпшника | PHP, Laravel, Symfony, CodeIgniter Библиотека пхпшника | PHP, Laravel, Symfony, CodeIgniter @phpproglib · 10.5K subscribers
Post #5079 2.59K
Улучшения в 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 для анализа запросов к базе данных с учётом схемы данных.
  • 👍 5
  • ❤ 2
More from @phpproglib
  1. Oct 2, 2026🎹 Что делать после ChatGPT? Следующий шаг — AI-агенты. Они не просто отвечают на запросы,…
  2. Sep 30, 2026🔥 Последний день для разработчиков AI уже пишет код. Теперь важнее научиться встраивать е…
  3. Sep 30, 2026🐸 Библиотека пхпшника
  4. Sep 29, 2026💡 Laravel-фича, которая спасает тесты от случайных запросов Http::preventStrayRequests()…
  5. Sep 28, 2026🔐 ramsey/uuid — UUID без самописного кода Библиотека помогает генерировать, парсить и вал…
  6. Sep 28, 2026🤔 Что выведет код? ❤️ — 1 🔥 — 2 👍 — 12 👾 — Fatal error 👇 Правильный ответ (нажми, что…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →