Не знал про аналог в Lua, но согласитесь такой тип данных не очень популярен в языках программирования.
Lua был лишь примером, на самом деле много других языков, которые поддерживают разные типы ключей в ассоциативном массиве, вот пример на Go: https://go.dev/play/p/Eb1MhUTaxr1. Кстати, PHP разработчики проделали огромную работу по оптимизации этого типа, в 7-ке появилась концепция "packed array", в 8.1 packed array оптимизировали, убрав ключи во внутреннем представлении структуры. То есть под капотом разделение на map/array уже реализованно в виде ZEND_HASH_PACKED_*/ ZEND_HASH_MAP_* (совсем недавно был только ZEND_HASH_*). Но я согласен, более специализированные структуры данных не помешают, а пока можно воспользоваться DS :)
Это не ОРМка :) По-моему, библиотека весьма посредственная, и есть куда более качественные альтернативы. Я, признаться, удивлен, что она нахватала столько звезд на гитхабе.
А если серьёзно, теперь не вижу больше смысла продолжать пользоваться оперой. Интерфейс у браузера последнее время и так не ахти, единственное что радовало, так это довольно шустрая работа с кучей открытых табов. Если теперь он будет так же тормозить, как и хром при 20 открытых табах, тогда зачем он вообще?
К примеру, в нём откажутся от кнопко переходов вперёд и назад по страницам в пользу жестов с той же функциональностью.
Интересно, как они обрабатывают случай, когда у страницы есть горизонтальный скролл (или открыты google maps, например), и я двигаю палец вправо. Что должно произойти — передвинуться содержимое страницы или открыться предыдущая страница?
Вы, по-моему, не улавливаете суть. Если вам не нравится psr-N, вы его не поддерживаете в своей библиотеке. Если есть идеи по улучшению, или несогласие с чём-то конкретно — всегда есть issue tracker, изгалайте свои мысли там, вас услышат.
Какой-то перец захотел, чтобы у всех PHP-библиотек логгирования был одинаковый интерфейс.
Не какой-то перец, а какие-то перцы, и не у всех библиотек, а у разрабатываемых этими перцами. Отличное решение, на мой взгляд. Соглашусь только, что корректней было бы его назвать FIG-1 вместо PSR-3.
И да, раскажите, пожалуйста, слезливую историю о том, как после принятия стандарта PSR-3 (PHP Standard Recommendation) ваша свобода творчества была ограничена, и как вам диктовали какие методы должны быть в ваших классах.
Как заметили выше, есть не только E_NOTICE, но и E_STRICT и E_DEPRECATED. А ещё есть тонны устаревшего кода, который работает и который никто в здравом уме переписывать не будет. Зато будут обновлять версии пхп, дабы улучшить производительность или закрыть дыры в безопасности.
Главная особенность исключений в том, что они фатальны, если не перехвачены. Поэтому не получится просто взять и поменять старую систему ошибок на новую.
С таким же успехом можно сказать, что и в PHP один типа ключа —
int|string
. И его так же можно использовать повсеместно: https://3v4l.org/Y5Vrb#v8.1.3 (или даже так: https://3v4l.org/EFUm3#v8.1.3).Lua был лишь примером, на самом деле много других языков, которые поддерживают разные типы ключей в ассоциативном массиве, вот пример на Go: https://go.dev/play/p/Eb1MhUTaxr1. Кстати, PHP разработчики проделали огромную работу по оптимизации этого типа, в 7-ке появилась концепция "packed array", в 8.1 packed array оптимизировали, убрав ключи во внутреннем представлении структуры. То есть под капотом разделение на map/array уже реализованно в виде
ZEND_HASH_PACKED_*
/ZEND_HASH_MAP_*
(совсем недавно был толькоZEND_HASH_*
). Но я согласен, более специализированные структуры данных не помешают, а пока можно воспользоваться DS :)Он не уникальный, в Lua есть тип table.
Если уж сильно не хватает, можно воспользоваться каким-нибудь пакетом, например https://github.com/azjezz/psl.
Совсем недавно была отклонена вторая попытка добавить этот оператор: https://wiki.php.net/rfc/pipe-operator-v2. Обсуждение и причины можно почитать по ссылкам:
* https://externals.io/message/109734
* https://externals.io/message/114770
* https://externals.io/message/115333
https://psysh.org/ пробовали?
JIT: 0m8.558s
не JIT: 0m25.604s
Python тоже, кстати:
А если серьёзно, теперь не вижу больше смысла продолжать пользоваться оперой. Интерфейс у браузера последнее время и так не ахти, единственное что радовало, так это довольно шустрая работа с кучей открытых табов. Если теперь он будет так же тормозить, как и хром при 20 открытых табах, тогда зачем он вообще?
Я б посмотрел на этот цирк на примере сайта вроде этого )
Интересно, как они обрабатывают случай, когда у страницы есть горизонтальный скролл (или открыты google maps, например), и я двигаю палец вправо. Что должно произойти — передвинуться содержимое страницы или открыться предыдущая страница?
Не какой-то перец, а какие-то перцы, и не у всех библиотек, а у разрабатываемых этими перцами. Отличное решение, на мой взгляд. Соглашусь только, что корректней было бы его назвать FIG-1 вместо PSR-3.
И да, раскажите, пожалуйста, слезливую историю о том, как после принятия стандарта PSR-3 (PHP Standard Recommendation) ваша свобода творчества была ограничена, и как вам диктовали какие методы должны быть в ваших классах.
Главная особенность исключений в том, что они фатальны, если не перехвачены. Поэтому не получится просто взять и поменять старую систему ошибок на новую.
Если интересно, вот мнение расмуса на этот счёт.
Либо сделать ещё проще:
Тогда создание модели сводится к:
И зачем передавать в модель весь контейнер
$app
? Лучше явно передавать все зависимости:Если у вас много моделей, можно сделать фабрику:
Вызов:
Хотя я предпочитаю явно всё прописывать, это позволяет «шарить» созданные объекты:
P.S. Создавать ControllerCollection проще через фабрику, как рекомендуется в документации:
Допустим, вам нужна поддержка логирования в вашем приложении. Тогда вместо того, чтобы каждый раз писать условия типа:
можно сделать эту проверку единожны при инициализации логгера:
и далее в коде просто писать
что, несомненно, выглядит чище и более соответствует принципу DRY.