TGViewer
Библиотека пхпшника | PHP, Laravel, Symfony, CodeIgniter Библиотека пхпшника | PHP, Laravel, Symfony, CodeIgniter @phpproglib · 10.5K subscribers
Post #4828 2.43K
Статья описывает путь разработчика по улучшению вывода типов в PHPStan, инструменте статического анализа для PHP, с особым акцентом на то, как массив $matches ведет себя после вызова функции preg_match. Цель заключалась в том, чтобы точно определить структуру массива $matches в зависимости от различных факторов, таких как группы захвата в регулярном выражении, необязательные или условные группы, а также флаги, такие как PREG_UNMATCHED_AS_NULL.

Автор столкнулся с рядом вызовов, включая:

✔️Определение, какие группы захвата присутствуют и как они структурированы.
✔️Обработка необязательных и условных групп.
✔️Управление тем, как функция preg_match влияет на $matches в разных ветках конструкций if-else.

Для решения этих задач разработчик экспериментировал с «хаками» для регулярных выражений, а затем перешел на более надежный метод анализа с использованием абстрактного синтаксического дерева (AST) через библиотеку Hoa\Regex, несмотря на проблемы с её поддержкой. Он также реализовал расширения в PHPStan для работы с переменными, переданными по ссылке, такими как $matches, и убедился, что эти улучшения могут быть полезны другим библиотекам, использующим обертки для preg_match.
My developer experience Array Shapes For Preg Match Matches In August 2023, I started into an adventure which in the end took me 10 months to figure out. It’s another part about my ongoing efforts to close blind spots in PHPStan’s type inference.
  • 🎉 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 →