Подборка свежих новостей, инструментов, видео и материалов из мира 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 Random\Randomizer(new Random\Engine\MersenneTwister(1234, MT_RAND_PHP)); foobar(); $result = $randomizer->shuffleString('foobar'); $randommizer = new Random\Randomizer(new Random\Engine\MersenneTwister(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
Комментарии (12)
Dangetsu-PK
21.02.2022 17:40+8Этот Патрик - знатный извращенец, должен я сказать.
vashkatsi
21.02.2022 19:46+2Я ничего не понял с этим __invoke, какой в нем смысл? Почему именно с __invoke, а не простым методом? Да и в принципе какая-то концепция странная.
BeMySlaveDarlin
21.02.2022 21:44+1__invoke не требует интерфейса, не требует дополнительного вызова конкретного метода и метаний в именовании метода рендера.
Invokable объекты можно передавать как callable и так ж выполнять.
Ещё какие-то моменты есть, но не вспомню с наскоку.
vashkatsi
21.02.2022 22:29Спасибо, круто, не думал в таком ключе. Ждем примеров от Патрика.
Brainbao
22.02.2022 11:02+1Примеры с 2017 года в [сети лежат](https://github.com/patrickallaert/php-sample-application/blob/master/src/Views/Layout.php)
vashkatsi
22.02.2022 11:54Круто, спасибо. Уважуха Патрику, мыслит нестандартно. У него вьюшки используются через __invoke, а юзеры создаются через require.
egor_nullptr
21.02.2022 18:11+2Доступна сертификация по Twig 3
Ждём не дождёмся сертификации по vim, состоящей из одного единственного вопроса
ARG89
22.02.2022 16:38Отличный материал, спасибо! я бы еще добавил новость про новый адаптер для Allure Framework с поддержкой PHPUnit и Codecept: https://qameta.io/blog/allure-php-2-0-major-update/
mnogokotin
спасибо )