Подборка свежих новостей и материалов из мира PHP.
В выпуске: Composer 2.2, Cycle 2.0, обновления актуальных веток PHP и другие релизы; конкурс с подведением итогов года; пачка интересных статей, инструменты, видео и другие новости сообщества.
Приятного чтения!
Этот дайджест подготовлен совместно с Insolita. Если понравился выпуск, плюсаните пост, пожалуйста.
🎄 Конкурс: Итоги 2021 года
Давайте вместе вспомним, что главное и интересное произошло в мире PHP за последний год?
Напишите ваш вариант в комментарии к этому посту и среди всех написавших 30 декабря мы разыграем PHP слоника.
Также вы можете пройти опрос по итогам года в PHP-сообществе — будет интересно посмотреть результаты и тоже есть шанс получить слоника в подарок.
⚡️ Новости
-
PHP 8.1.1, PHP 8.0.14, PHP 7.4.27
Багфиксы для актуальных веток PHP, а в случае PHP 7.4 — это последнее регулярное обновление и с этого момента для ветки PHP 7.4 будут выходить только секьюрити релизы.
-
Composer 2.2
После 10 лет работы на PHP 5.3, в композере наконец-то подняли минимальную версию PHP — теперь это PHP 7.2.5.
Этот релиз композера выходит с пометкой LTS и будет поддерживаться как минимум до конца 2023.
В релизе значительно улучшена производительность и потребление памяти. Причем чем сложнее граф зависимостей, тем более заметны будут улучшения. На среднем сайта на Drupal 9, например, установка пакетов проходит на 25% быстрее и потребляет на 80% меньше памяти.
Еще сделали более гибким флаг
--ignore-platform-req
: например, можно игнорировать все расширенияext-*
, но оставить проверку версии PHP; или если указать флаг--ignore-platform-req=php+
, то это позволит установить пакет, требующийphp: 8.0.*
на PHP 8.1, но не на PHP 7.4.
🛠 Инструменты
- Cycle 2.0 — Спустя 3 года после первого релиза команда выпустила второй мажорный релиз Cycle — DataMapper, ORM для PHP для использования как в классических, так и демонизированных PHP-приложениях.
- ertuo-php/ertuo — Снова роутер для PHP.
Судя по бенчмаркам, работает в несколько раз быстрее symfony/routing. В статье автор объясняет, как работает реализация и почему она быстрая. Но вряд ли роутер в вашем приложении является хоть сколько-нибудь существенной проблемой производительности. - aimeos/upscheme — Независимые от фреймворка миграции баз данных.
- Roave/BetterReflection 5.0 — Улучшенный Reflection API: можно получить информацию без загрузки классов, из замыканий, и многое другое. В новой версии добавлена поддержка PHP 8.1 и сильно улучше производительность.
Symfony
- 📺🇷🇺 SymfonyWorld 2021 Winter Edition. Обзор конференции
- Использование компонентов symfony/messenger и symfony/console в качестве независимых компонентов
- Организация тестов в проекте на Symfony
- Ключевые концепции пакета Security в Symfony за 5 минут
Laravel
- spatie/laravel-health — Пакет для мониторинга Laravel-приложения: работоспособность сайта, нагрузка CPU, доступное дисковое пространство, соединения с базами, очереди, cron и прочее.
- tonysm/turbo-laravel — Интеграция JS-пакета hotwired/turbo от создателей Ruby on Rails в Laravel.
- TheDragonCode/laravel-migration-actions — Интересный альтернативный подход к миграциям. Позволяет задать окружения для выполнения, явно объявить или отключить поддержку транзакций, число попыток выполнения и действия при успешном выполнении или ошибке.
- Managing Laravel services
- Laravel Pseudo-Daemons
- Building a multi-room chat application with Laravel and Centrifugo
- 🇷🇺 Tinkerwell и Invoker — Как два инструмента помогают экономить время во время разработки.
- 📺🇷🇺 PHP8: новые фишки. Готовимся к laravel 9
Yii
- Yii 1.1.25 — Первая версия фреймворка Yii активно не развивается, но фиксы совместимости выходят. В этом обновлении исправлено несколько для PHP 8.0.
- Также вышли в свет первые стабильные релизы компонентов для Yii 3: yiisoft/user, yiisoft/translator-extractor, yiisoft/config, yiisoft/yii-swagger, yiisoft/widget.
📝 Статьи
- Trying out PHP after 7 years — Автор попробовал PHP и Symfony после 7 лет работы на Java и делится впечатлениями.
- История разработки фасетного поиска средствами PHP — Автор написал фасетный поиск на PHP, а потом портировал его на Go и он не стал от этого быстрее. В попытках разобраться что к чему обнаружил места для оптимизации. Мастрид.
- 🇷🇺 Зависимости для сущностей и команд — Новая мегастатья от Дмитрия Елисеева.
- Heaps explained in PHP — Про структуру данных 'куча' и где ее использовать в PHP приложениях.
- Implementation of Chain of Responsibility Design Pattern in PHP — Про паттерн 'цепочка обязанностей'.
- async & await at the edge with ReactPHP — Вышел PHP 8.1 с поддержкой файберов и один из мейнтейнеров ReactPHP пишет о том, как они используются.
В частности, добавлены новые функции ReactAsyncasync и ReactAsyncawait:
async(function () { $browser = new ReactHttpBrowser(); $valueA = await($browser->get('https://blog.wyrihaximus.net/')); $valueB = await($browser->get('https://wyrihaximus.net/')); $valueC = await($browser->get('https://github.com/wyrihaximus/')); });
- PHP Benchmark: include() vs file_get_contents() —
include()
можно сделать быстрее, чемfile_get_contents()
, если подкрутить настройки Opcache. - Where does my validation live? — Автор thephpleague/flysystem делится своим подходом к валидации на разных уровнях приложения.
📺 Аудио/Видео
- 📺🇷🇺 DDD в PHP на примере холодильника, пиццы / Tech Lead Борис Беньковский
- 🔈 Подкаст PHP Internals News — Выпуск с Jordan LeDoux про перегрузку операторов [RFC] User Defined Operator Overloads.
- 🔈 Подкаст Voices of the ElePHPant Ep#366 — Joe Watkins, Sara Golemon, Sebastian Bergmann рассказывают про PHP Foundation.
📣 Сообщество
- Grinding to $1,000,000 in revenue over 6 years — Вдохновляющая история от создателя Laravel Shift.
- Стоит ли учить PHP в 2022 году?
Подписывайтесь на Telegram-канал PHP Digest.
Этот дайджест подготовлен совместно с Insolita. Если вам понравился выпуск, подпишитесь на Юлию в твиттере и поставьте плюс в пост, пожалуйста.
Заметили ошибку или опечатку? Сообщите в личку хабра или телеграм.
Прислать ссылку можно через форму или просто напишите мне в телеграм.
Поиск ссылок по всем дайджестам
← Предыдущий выпуск: PHP-Дайджест №217
Автор: Роман Пронский