Подборка свежих новостей и материалов из мира PHP.
Конфликт вокруг расширения Swoole и создание форка OpenSwoole; асинхронные фреймворки Amp и ReactPHP выпустили общую реализацию ивент-лупа; PHP 8.1 RC 4; принят первый RFC для 8.2.
Также в выпуске два поста от Никиты Попова, полезные статьи, видео.
Приятного чтения!
Этот дайджест подготовлен совместно с Insolita. Если понравился выпуск, плюсаните пост, пожалуйста.
Новости
-
Конфликт вокруг Swoole привел к созданию форка OpenSwoole
Вся суть конфликта изложена в этом треде на GitHub.
В Swoole был добавлен код, который что-то скачивает с закрытого ресурса:
Это, конечно же, можно расценивать как проблему безопасности. Один из контрибьюторов Swoole, Bruce Dou @doubaokun, указал на эту проблему.
Позже, doubaokun попытался расширить свои права и выпустить релиз расширения на PECL. Его изменения откатили, а он в ответ накатил их снова и в закрытом чате высказывался непотребно в сторону автора Swoole @matyhtf. После чего у Bruce Dou отобрали права доступа к репозиторию и тогда он объявил о создании своего форка.
История со скачиванием файлов с стороннего сервера, конечно, портит репутацию Swoole. Но я склонен больше доверять авторам расширения, чем Bruce Dou. Вот почему:
- Проблемный кусок кода быстро удалили. По словам авторов, планировалось реализовать дашборд для Swoole с отображением всяких метрик. Этот дашборд будет открыт в отдельном расширении.
- Создатель форка за 9 лет существования Swoole сделал всего 49 коммитов и не входит даже в топ-10 контрибьюторов.
- Во время обсуждения RFC файберов, автор форка довольно токсично высказывался в твиттере, при этом отказывался писать в Internals по существу.
Тем не менее стоит отдать должное Bruce Dou, за то, что поддерживал официальный сайт, твиттер и Slack-сообщество Swoolе и вообще занимался популяризацией расширения.
Будем наблюдать за Swoole и OpenSwoole.
-
Amphp и ReactPHP объединили усилия и опубликовали revoltphp/event-loop
Команды разработчиков двух популярных асинхронных фреймворков Amphp и ReactPHP выпустили совместную абстракцию событийного цикла на основе файберов.
Файберы будут доступны в PHP 8.1+ из коробки, а на PHP 8.0 можно поставить расширение ext-fiber.
По умолчанию ивент-луп работает с использованием системного вызова
select
. Также поддерживаются низкоуровневые событийные библиотеки ev, event и uv. Последняя, к слову, используется в Node.js для ивент-лупа.Следующие версии Amp и ReactPHP не будут поставляться с собственной реализацией цикла событий, а будут напрямую использовать RevoltPHP.
-
PHP 7.4.25, PHP 8.0.12
Багфиксы для актуальных веток.
-
PHP 8.1 RC4
Четвертый релиз-кандидат доставлен по расписанию. Впереди еще как минимум два.
Пара свежих видео от Brent Roose:
- Классный видеоролик — PHP за 100 секунд:
PHP Internals
-
[RFC] Deprecate partially supported callables
Предложение принято. В PHP 8.2 следующие варианты вызова колбэков будут объявлены устаревшими:
"self::method" "parent::method" "static::method" ["self", "method"] ["parent", "method"] ["static", "method"] ["Foo", "Bar::method"] [new Foo, "Bar::method"]
Нормальные вызовы вида
"function"
,"Foo::method"
,["Foo", "method"]
и[new Foo, "method"]
не затронуты этим предложением. Потому что для них вызов через скобки работает:"printf"('Hello World'); "Foo::method"(); [new Foo, "method"]();
-
[RFC] Deprecate dynamic properties
В текущих версиях PHP, если попытаться записать в несуществующее свойство, то оно будет автоматически создано.
В современном коде это редко делается намеренно, чаще это опечатка или плохая практика.
В этом RFC предлагается задепрекейтить и впоследствии удалить возможность создания динамических (необъявленных) свойств.
class User { public $name; } $user = new User; // Assigns declared property User::$name. $user->name = "foo"; // Oops, a typo: $user->nane = "foo"; // PHP <= 8.1: Молча создает динамическое свойство $user->nane. // PHP 8.2: Вызывает предупреждение, но все равно создает динамическое свойство. // PHP 9.0: Выбрасывает исключение Error.
Это изменение не будет касаться класса
stdClass
и унаследованных от него. Поведение магических__get
/__set
также не затрагиваются этим изменением.Также теперь предлагается еще добавить атрибут
#[AllowDynamicProperties]
, которым можно пометить любой класс и тогда в нем можно будет объявлять динамические свойства. -
Add loop mode (`-L`) in the CLI SAPI
Интересная идея от Matthieu Napoli, автора Bref.
Предлагается добавить режим «цикла» для PHP:
php -L script.php
.Это как если запустить скрипт в цикле
while(true) {}
, но только на каждой итерации скрипт изолирован. По сути, это клон поведения PHP-FPM (worker) для CLI.Такой режим может пригодиться для всяких воркеров, AWS Lambda и подобных окружений.
Symfony
- В symfony/console добавили автодополнение команд в терминале из коробки. Все пакеты на основе symfony/console автоматически тоже получают автодополнение.
- История нового дизайна документации Symfony — symfony.com/doc.
- Неделя Symfony #773 (18-24 Октября 2021)
Laravel
- Laravel Tinker — PhpStorm плагин, который позволяет использовать Laravel Tinker прямо в IDE.
- spatie/laravel-site-search — Полнотекстовый поиск для сайта на базе Meilisearch. Статья и видео в поддержку.
- Как работает Livewire (очень подробно).
- Тестирование сложных фич с помощью Laravel и Pest.
- Releasing Laravel — Стрим от одного из участников Laravel core-команды, где он демонстрирует процесс релиза пакетов Laravel.
Yii
- Релизы пакетов Yii 3: Yii View 4.0.0, CSRF 1.1.0, Html 2.2.0,Symfony Mailer 1.0.0
Статьи
- Никита Попов опубликовал два крутых поста про внутренности PHP: Как работает opсache и про раннее связывание в PHP.
- Работа с деревьями в PHP
- Как выполнять HTTP-запросы со сжатием с помощью Curl и PHP.
- smknstd/modern-php-cheatsheet — Шпаргалка по современному PHP.
- Расширенные возможности MessagePack — MessagePack — это бинарный формат для сериализации данных. В посте про расширение системы типов и про другие фишки MessagePack.
- Пара постов по использованию инструмента Rector: Как использовать фреймворки требующие php>=8.1 на более старых версиях php, и Как преобразовать аннотации в атрибуты.
Аудио/Видео
- Roadrunner — что дальше? — Запись митапа с R&D командой SpiralScout про дальнейшие планы RoadRunner, а также про актуальные фичи.
- Топ 10 трюков в PhpStorm от Christoph Rumpel.
- PHP Release Radar — Episode 12: Про CaptainHook — менеджер Git-хуков.
Подписывайтесь на Telegram-канал PHP Digest.
Этот дайджест подготовлен совместно с Insolita. Если вам понравился выпуск, поставьте, пожалуйста, ему плюс.
Заметили ошибку или опечатку? Сообщите в личку хабра или телеграм.
Прислать ссылку можно через форму или просто написав мне в телеграм.
Поиск ссылок по всем дайджестам
← Предыдущий выпуск: PHP-Дайджест № 213
Автор: Роман Пронский