Подборка свежих новостей, инструментов, видео и материалов из мира PHP.
Приятного чтения!
Этот дайджест подготовлен совместно с Insolita. Если понравился выпуск, плюсаните пост, пожалуйста.
⚡️️ Новости
- PHP 7.4.28, PHP 8.0.16, PHP 8.1.3
Обновления актуальных веток PHP с фиксом уязвимости вphp_filter_float()
, а в 8.0 и 8.1 еще с пачкой других фиксов.Для PHP 7.3 обновления уже не выходят, даже если обнаружены проблемы безопасности. И хотя данной уязвимости PHP 7.3 не подвержена, тем не менее если вы все еще используете эту версию, то лучше запланировать обновление в ближайшее время.
- Ubuntu 22.04 LTS выйдет с PHP 8.1
Очередной релиз популярного Linux дистрибутива выйдет 21 апреля с предустановленным PHP версии 8.1.
В связи с этим предлагается поднять минимальную версию PHP в следующем релизе Symfony 6.1. А для Drupal 10 это уже сделали. - PhpStorm 2022.1 EAP
Продолжается программа раннего доступа первого мажорного релиза IDE в этом году. Сделали поддержку многострочных и вложенных аннотаций array shape! Можно использовать как в видеPHPDoc
, так и в виде атрибута#[ArrayShape]
. - [RFC] Redacting parameters in back traces
На голосовании предложение добавить аттрибут#[SensitiveParameter]
для предотвращения отображения конфиденциальныx данных в отладочных логах.Скрытый текстfunction test( $foo, #[SensitiveParameter] $bar, $baz ) { throw new Exception('Error'); } test('foo', 'bar', 'baz'); // В результате в отладочной строке значение секретной переменной должно быть заменено на какое-то абстрактное значение: /* Fatal error: Uncaught Exception: Error in test.php:8 Stack trace: #0 test.php(11): test('foo', Object(SensitiveParameterValue), 'baz') #1 {main} thrown in test.php on line 8 */
- [RFC] Undefined Variable Error Promotion
Автор ранее предложил в PHP 9 перевести многие оставшиеся предупреждения (WARNING
) в полноценные исключения. Такое уже раньше делали в PHP 8.0.Ну а начать решил с использования необъявленных переменных. Сейчас в этом случае бросается
Warning
и используется значениеnull
.Скрытый текст// PHP < 8.2 if ($user->admin) { $restricted = false; } if ($restricted) { // Сейчас тут просто WARNING, а будет Exception die('You do not have permission to be here'); } // Чтоб исправить, нужно добавить инициализацию переменной // PHP >= 8.2 $restricted = true; // <-- Вот тут if ($user->admin) { $restricted = false; } if ($restricted) { die('You do not have permission to be here'); }
- [RFC] Random Extension 4.0
Сейчас функции типаrand()
илиmt_rand()
будут генерировать одну и ту же последовательность для одинакового посевного (seed) значения, заданного с помощьюsrand()
. Но из-за использования глобального состояния невозможно создать несколько генераторов с разными посевными значениями и использовать их одновременно.Автор предлагает добавить объектный API для работы с генераторами псевдослучайных последовательностей, чтоб решить проблему глобального состояния.
Скрытый текст// Сейчас вот так mt_srand(1234, MT_RAND_PHP); foobar(); $result = str_shuffle('foobar'); mt_srand(1234, MT_RAND_MT19937); foobar(); $next = mt_rand(); // Предлагается вот так $randomizer = new RandomRandomizer(new RandomEngineMersenneTwister(1234, MT_RAND_PHP)); foobar(); $result = $randomizer->shuffleString('foobar'); $randommizer = new RandomRandomizer(new RandomEngineMersenneTwister(1234, MT_RAND_MT19937)); foobar(); $next = $randomizer->getInt();
- [RFC] Allow null and false as stand-alone types
Предлагается добавить возможность использоватьnull
иfalse
в декларациях типов.
Во-первых, это недостающие куски для полноты системы типов в PHP — естьmixed
, добавилиnever
, объединения и пересечения, не хватает юнит-типа.
Во-вторых, такие типы позволят покрыть некоторые граничные случаи и улучшить статический анализ.
🛠 Инструменты
- cebe/php-openapi — Преобразовывает OpenAPI-спецификации из yaml/json файлов в PHP-объекты.
- spatie/github-actions-watcher — Консольный инструмент для просмотра состояния всех GitHub Actions в
реальном времени. - nette/php-generator — Генератор PHP-кода теперь с поддержкой PHP 8.1.
- sherifabdlnaby/kubephp — Продакшн шаблон для развертывания приложения в Docker и Kubernetes. Совместим с Laravel 5+ и Symfony 4+.
- jaem3l/unfuck — Инструмент налету удаляет все
final
,private
и определения типов в коде из vendor. Потому что сколько можно терпеть эти издевательства! Под капотом использует обертку над стримом, поэтому на проде лучше не запускать :-)Появился в ответ на твит про функцию
invade()
и пакет spatie/invade:
Symfony
- Книга «Symfony: The Fast Track» Symfony теперь доступна в варианте для Symfony 6.0.
- Доступна сертификация по Twig 3 — 60 минут и 45 вопросов.
- How to Build and Distribute Beautiful Command-Line Applications with PHP and Composer
- Decoupling frontend and backend development — The easy way!
- How does Symfony decide what content type to return in a response?
Laravel
- Вышел Laravel 9
Есть отличные обзоры:- 🇷🇺📺 Релиз Laravel 9: обзор новых функций — Коротко в видео на русском от CutCode.
- 9 интересных новшеств в Laravel 9 — В тексте на Хабре.
- 📺 What's New in Laravel 9 — В 12 минут от Mohamed Said (Laravel Core).
- 📺 Laracasts: What's New in Laravel 9 — Подробный разбор от Jeffrey Way в 11 эпизодах. Или можно посмотреть одним роликом на YouTube (45 минут).
От себя еще добавлю, что теперь коллекции illuminate/collections покрыты дженериками и дополнение кода для них работает в PhpStorm.
- 📺 Laracon Online Winter '22
Тейлор рассказывал про Laravel 9 и про Nova 4. Из хайпового был доклад от Marcel Pociot про Web3 на Laravel.Краткий 🇷🇺📺 обзор Laracon online winter 2022 подготовили камрады из CutCode.
- hmones/laravel-digest — С помощью пакета можно отправлять письма пользователям в виде настраиваемых дайджестов.
- ellgreen/laravel-loadfile — Небольшой инструмент для использования MySQL LOAD DATA для быстрой вставки строк из файла в таблицу.
- worksome/envy — Команда
artisan
для синхронизации настроек окружения и поддержания.env.example
в актуальном состоянии. Пост в поддержку. - 🇷🇺 Как найти самые медленные запросы в Laravel приложении
Yii
- Yii 2.0.45 — Добавлена поддержка PHP 8.1
- Вышел Yii Runner для Yii3 и адаптеры для консольного приложения (Yii Console Runner), HTTP-приложения (Yii HTTP Runner) и приложения на базе RoadRunner (Yii RoadRunner Runner). Раннеры позволяют упростить процесс настройки приложения, скрывая детали инициализации.
- 🇷🇺 Как помочь с релизом Yii 3 — Статья Виктора Бабанова из core-команды Yii3 подробно рассказывает как помочь фреймворку кодом, даже если вы никогда раньше этого не делали.
Спасибо Сергею Предводителеву за подготовку блока про Yii!
📝 Статьи
- Frank de Jonge: О разных типах событий в событийных (event-driven) системах
- Damien Seguy: All the Dynamic Syntaxes in PHP — Список всех динамических возможностей PHP. Хороший вариант для вопросов на собеседованиях?
- Brent Roose: Service locator: an anti-pattern
- 🇷🇺 Пых: fromName для enum — Про методы
fromName
иtryFromName
для получения перечисления любого типа по его имени ($name
).
📣 Сообщество
- 💵🇷🇺 Курс по принципам SOLID на примере Laravel от CutCode — Ребятки сделали классную фишку и обещают донатить 10% от продаж курса в Фонд PHP.
В тему также пара постов про SOLID от сообщества: 🇷🇺 Вывернутый SOLID, 🇷🇺 SRP или DRY?
- Shopware получили $100 млн инвестиций от PayPal и Carlyle
Открытая е-commerce платформа на базе Symfony поднимает хорошие деньги, пока кто-то говорит, что PHP мертв. Ранее в 2020 $130 млн получили Spryker — другая e-com платформа на PHP.
Обе компании, кстати, поддерживают фонд PHP. - 🇷🇺📺 Чем запомнился 2021 год русскоязычному PHP-сообществу — в 3000+ ответах — Стрим, посвящённый итогам года с Александром Макаровым, Валентином Удальцовым и Кириллом Несмеяновым.
- Что смотрели и читали по PHP в 2021: список от сообщества
- Brent Roose высказался о шаблонизаторах и аргументирует в пользу Blade:
В ответ, конечно, указали на преимущества Twig. Но вот Patrick Allaert, релиз-менеджер PHP 8.1, поделился своим весьма интересным подходом:
Его вьюшки — это не просто файлы, а классы в которых HTML он выводит непосредственно в методе
__invoke()
. Кто-нибудь использует подобный подход? - Tim Glabisch предложил интересную идею для обновления легаси-проектов: инструмент, который в рантайме отслеживает типы переменных и потом позволяет их проставить уже в коде. Что думаете?
Подписывайтесь на Telegram-канал PHP Digest.
Этот дайджест подготовлен совместно с Insolita. Если вам понравился выпуск, подпишитесь на Юлию в твиттере и поставьте плюс в пост, пожалуйста.
Заметили ошибку или опечатку? Сообщите в личку хабра или телеграм.
Прислать ссылку можно через форму или просто напишите мне в телеграм.
Поиск ссылок по всем дайджестам
← Предыдущий выпуск: PHP-Дайджест № 221
Автор: Роман Пронский