Pull to refresh

Comments 28

Утром просмотрел по дороге на работу PHP-дайджест, добавил оригинальную статью в закладки вечером почитать, а вечером уже и перевод готов:))
Спасибо, автор!

К сожалению, на момент написания статьи PhpStorm этого не умеет.

К сожалению на момент написания этой статьи PhpStorm это умеет. Да-да перевод, все дела, но дата у статьи на Хабре сегодняшняя, а в статье аж 11 упоминаний про бесполезность Шторма
PhpStorm это умеет.

Не поленился и скачал EAP версию шторма.
Увы, но нет, не умеет


Даже если поставить EA Inspections.
Видимо со скалярными типами пока беда. Пример попроще тоже не ругает:

function showAge(int $age){}
showAge('s');
В данном случае, все верно. На ваш пример Шторм будет ругаться, если добавить
declare(strict_types=1);
Действительно. Спасибо, всё время про него забываю.
Когда его уже сделают по умолчанию, в php8 не планируют?
хм, я точно помню, что простые на работе делал Object[] и подсвечивало
сейчас проверил — ничего не светит

тогда приношу извинения m0rtis, мой комментарий не верный

По ходу дела вы сами запутались. В статье сказано, что Шторм не понимает запись вида array<string,User>. И вы приложили цитату из статьи, относящуюся к этой аннотации.


Аннотации вида Object[] прекрасно обрабатываются, и об этом прямо сказано в начале статьи.

Такой фокус можно провернуть через map указав типы в аргументах

Автор оригинала приезжал в Москву на PHPRussia2019 и рассказывал про статические анализаторы, которые упоминаются в статье.


Холиварный вопрос: мне кажется, или это оверинжиниринг, указывать в дженерики произвольный тип значений в стеке из примера в статье? PHP же и так динамически типизирован. Или это имеется ввиду типизированный стек?

Имеется ввиду типизированный стек. Переменная стека при объявлении содержит аннотацию, указывающую тип данных хранящихся в конкретном стеке:
/** @var Stack<User> $userStack */
$userStack = new Stack();

Анализатор использует эту информацию для контроля типов при использовании данного стека.
Вот тоже не люблю аннотации почему-то, еще когда на Java программил. Вроде с одной стороны и удобно, но с другой — язык в языке получается, значительная часть логики фактически в комментариях.
PHP всё больше и больше похож на Франкенштейна. Синтаксис просто вырви мозг. Больше похоже на развитие в сторону Objective-C. Почему нельзя было сделать неймспейсы как в других языках, учитывая, что PHP С подобный, а теперь ещё дженерики в комментах. Вообще впечатление такое, что развитие PHP отдали Гомеру Симпсону (серия про то, как он конструировал автомобиль).
UFO just landed and posted this here

Чушь какую-то написали, не подумав

UFO just landed and posted this here
UFO just landed and posted this here
UFO just landed and posted this here
В том то и дело, что идет движение в сторону более строгих типов. То есть то что описывает RFC будет работать на уровне языка и позволит более продвинуто описывать и контролировать типы, а не как вы предположили:
Работать я так понимаю, это будет на уровне IDE, и никак не будет если я правлю код в блокнотике, меня там ничто не ограничит и не остановит.


А то что описывается в этой статье — применение для тех же целей дополнительных инструментов (так как пока на уровне языка таких возможностей нет). Статический анализатор прогоняет проверки, например, на каждый Pull Request, в случае обнаружении проблем код разворачивается. То есть это исключительно метод контроля качества кода.

Таким образом в исходном сообщении вы половину сочинили, половину потратили на бессмысленные придирки к термину, который у других никаких проблем в понимании не вызывает.
UFO just landed and posted this here
Phan и PHPStan не понимают специфичные аннотации psalm.

PHPStan с версии 0.12.x понимает psalm аннотации и поддерживает дженерики

Sign up to leave a comment.

Articles

Change theme settings