Наверное один из самых старых обсуждаемых и популярных RFC в PHP. На данный момент на уровне языка реализовать их трудно, как бы сильно разработчикам не хотелось получить этот инструмент.
Однако, используя Psalm (или PHPStan) в ваших проектах, вы можете делать это уже сейчас.
В чем смысл их использования?
Один из частых кейсов, когда нам нужно создать коллекцию объектов. Но создавая её таким образом, мы не можем гарантировать, что внутри все объекты будут типа
User. Что делает разработчик в таком случае?1. Забивает болт.
2. Внутри всех
foreach приходится добавлять явную аннотацию /** @var User $user */ и нужно следить не только за типами, но и за аннотациями.3. Добавляет явную проверку
$user instanceof User.Для таких случаев у Psalm есть @template. Вот так может выглядеть ваша коллекция.
@template T — всё равно что согласно RFC написать Collection<T>. Это означает, что любая ссылка на докблок T, должна рассматриваться как параметр этого типа. @psalm-param class-string<T> $type — указываем, что параметры должны быть строкой класса определенного типа.Теперь каждая коллекция ожидает аргумент своего типа. Это избавляет вас от лишних проверок, необходимости явно указывать
@var или создавать классы коллекций для каждого типа объекта.В случае несоблюдения этих контрактов, статический анализатор выкинет ERROR. Если вы пользуетесь PHPStorm, то он обязательно вам подскажет об ошибке и без запуска psalm.
Короче, этот инструмент отлично работает и давно используется многими разработчиками, так что не нужно ждать, а можно использовать его уже сейчас ;)
#PHP #middle #psalm #source