Как стать автором
Обновить

Комментарии 27

Очень бы хотелось уже видеть типизированные массивы, по типу:

function foo(int[] $array): Foo[]

Может кто в курсе, есть ли движения в этом направлении? По RFC нашел что-то похожее со статусом decline

Пока такое возможно только при использовании статических анализаторов, например Psalm.

Пока обхожусь таким вариантом

function foo(int ...$array)

Такой вариант создает достаточно большую нагрузку, проверяя типы списка аргументов в рантайме.

Типизация в php в целом создаёт дополнительную нагрузку. Т.к. интерпретатору необходимо эти проверки осуществлять при исполнении

Слово «интерпретатор» не очень корректное, в остальном, конечно же, вы правы.

  • PHPIDS: библиотека обнаружения атак на ваши веб-приложения

А что там последние коммиты 9 лет назад?

Ваша правда. Включил в дайджест, потому что она обсуждалась в PHP Weekly.

Уберу.

Top PHP Web Development Trends in 2022 - довольно спорная статья, утверждающая, что современные тренды в PHP это: использование версий 7.1 и 7.2 и фреймворков Laravel, CakePHP, CodeIgniter, Zend Framework.

Хах, упомянуть ларавел и не отметить симфони - это, как минимум, странно

Вообще-то голосование по Sealed Classes уже закончилось и предложение отклонено — т.к. не набрало 2/3 голосов.

Я не одним днем готовил этот текст, прошу прощения.

Предложение находится в стадии голосования и, в целом, за его принятие уже подано голосов больше, чем за отказ.

Нужно 2/3 что б принять =( Так что скорее всего зареджектят.


P.S. Ой, я слепой слоупок, выше коммент как раз про это. Оказывается уже голосование закончилось даже. Что ж, очень жаль. Придётся дальше покрывать все классы @internal и @psalm-internal

А может кто-нибудь объяснить, зачем нужен тип возврата null? Другими словами, если принимаем или возвращаем только null, то зачем его вообще принимать или возвращать? При наследовании его невозможно будет переписать (ошибка наследования). Единственный вариант - комбинированные типы с null (и вот их как раз можно было бы сузить в случае возврата или расширить комбинированным типом для параметров), но для этого узкого кейса уже есть nullable types. Что я упустил?

Тоже пока не понимаю полезности типа null, нужен пример из реальной практики где это хорошо зайдет

Nullable types — это когда значение либо единственного типа, либо null. А для тех случаев, когда значение может быть одного из нескольких типов или null, nullable types не применимы — необходимо явно прописывать null.

Нельзя написать:
?string|array
или
?string|?array

Надо:
string|array|null

А в стандартной библиотеке такие функции есть и если вводится типизация, то и библиотечные функции должны иметь типизированную сигнатуру.

ОК, спасибо, согласен в случае комбинированных типов с двумя и более + null. Разве что такие варианты лично я обычно вижу как антипаттерн и чаще всего ищу альтернативы, но это уже вкусовщина, скорее.

Зачем Sealed Classes? Кто объяснит их реальное применение, а то кажется, что это какая-то избыточная штука, которой почти никто не будет пользоваться. Я просто реально не понимаю, зачем запрещать реализации классов и ограничивать наследников...

В данном случае более строгий контроль наследования. Чтобы пользователь кода не пихал твой класс куда попало. Упрощает конвенции в команде и объем мнемоническое нагрузки при ревью.

Symfony - убрали официальную документацию на русском языке.

В связи с этим вопрос, кто в теме - она вообще где-то в доступе осталась? Может кто-то участвовал в ее написании. Не то чтобы это было критично - даже полезно, но мне для школьников надо.

Что-то есть, например, здесь, но её актуальность и полнота под большим вопросом.

Собственно переводы и убрали потому что их очень сложно поддерживать в актуальном состоянии.

Также для ознакомления с Symfony сейчас, вероятно, лучше рекомендовать книгу. Вариант на русском с сайта убрали, но он есть, например, здесь.

Книга на русском языке была не до конца обновлена, поэтому её скрыли с сайта.

На днях перевод актуализировали, книга снова доступна.

Похоже, в php опять откат адекватности или я чего-то не понимаю.

Вроде только стали нормально типизировать по-человечески, и вот новый возвращаемый тип false. Чем им bool не угодил-то?

Например, стандартная функция strpos возвращает либо целочисленный индекс (если подстрока найдена), либо значение false (если не найдена) — значение true она не может вернуть ни при каких обстоятельствах. Таких функций в стандартной библиотеке много, да и в пользовательском коде такой подход нередко встречается. Так что указание того, что функция может вернуть не любое значение типа bool, а либо значение отличного от bool типа (нормальное завершение), либо false (действие не выполнено), безусловно улучшает надёжность и читабельность кода.

Ага, а можно указать, что функция возвращает 42 и ничто иное?

Понимаю откуда ноги растут, но не понимаю зачем это нужно. Про null еще понять можно, это всё же своеобразный тип данных, но false - это же уже и есть данные, но никак не тип.

но false — это же уже и есть данные, но никак не тип.

Почему?


Ну т.е. почему какой-нибудь кейс Red у enum Color { Red, Green, Blue } рассматривается как отдельный подтип типа Color, который в свою очередь уже enum, а вот enum bool { true, false } уже нет, например?)

Много вы видели функций, которые возвращают 42 и ничего другого? Очевидно, что нет. А функции, возвращающие false (наряду со значениями других типов) и никогда не возвращающие true, в PHP на каждом углу. И выделение подмножества типа bool, содержащего единственную константу false, является отражением типичных практик написания PHP-кода.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории