- PVSM.RU - https://www.pvsm.ru -

Подборка свежих новостей и материалов из мира PHP.
Конфликт вокруг расширения Swoole и создание форка OpenSwoole; асинхронные фреймворки Amp и ReactPHP выпустили общую реализацию ивент-лупа; PHP 8.1 RC 4; принят первый RFC для 8.2.
Также в выпуске два поста от Никиты Попова, полезные статьи, видео.
Приятного чтения!
Этот дайджест подготовлен совместно с Insolita [2]. Если понравился выпуск, плюсаните пост, пожалуйста.
НовостиВся суть конфликта изложена в этом треде на GitHub [4].
В Swoole был добавлен код [5], который что-то скачивает с закрытого ресурса:

Это, конечно же, можно расценивать как проблему безопасности. Один из контрибьюторов Swoole, Bruce Dou [6] @doubaokun [7], указал на эту проблему.
Позже, doubaokun попытался [8] расширить свои права и выпустить релиз расширения на PECL. Его изменения откатили, а он в ответ накатил их снова и в закрытом чате высказывался непотребно в сторону автора Swoole @matyhtf [9]. После чего у Bruce Dou отобрали права доступа к репозиторию и тогда он объявил [10] о создании своего форка.
История со скачиванием файлов с стороннего сервера, конечно, портит репутацию Swoole. Но я склонен больше доверять авторам расширения, чем Bruce Dou. Вот почему:
Тем не менее стоит отдать должное Bruce Dou, за то, что поддерживал официальный сайт, твиттер и Slack-сообщество Swoolе и вообще занимался популяризацией расширения.
Будем наблюдать за Swoole и OpenSwoole.
Команды разработчиков двух популярных асинхронных фреймворков Amphp и ReactPHP выпустили совместную абстракцию событийного цикла на основе файберов.
Файберы будут доступны в PHP 8.1+ из коробки, а на PHP 8.0 можно поставить расширение ext-fiber [15].
По умолчанию ивент-луп работает с использованием системного вызова select. Также поддерживаются низкоуровневые событийные библиотеки ev, event и uv. Последняя, к слову, используется в Node.js для ивент-лупа.
Следующие версии Amp и ReactPHP не будут поставляться с собственной реализацией цикла событий, а будут напрямую использовать RevoltPHP.
Багфиксы для актуальных веток.
Четвертый релиз-кандидат доставлен по расписанию. Впереди еще как минимум два.
Пара свежих видео от Brent Roose:
Improvements to Array Spreading [19]
Enums [20]
PHP InternalsПредложение принято. В 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"]();
В текущих версиях 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], которым можно пометить любой класс и тогда в нем можно будет объявлять динамические свойства.
Интересная идея от Matthieu Napoli, автора Bref [24].
Предлагается добавить режим «цикла» для PHP: php -L script.php.
Это как если запустить скрипт в цикле while(true) {}, но только на каждой итерации скрипт изолирован. По сути, это клон поведения PHP-FPM (worker) для CLI.
Такой режим может пригодиться для всяких воркеров, AWS Lambda и подобных окружений.
Symfony
Laravel
Тестирование сложных фич с помощью Laravel и Pest [35].
Releasing Laravel [36] — Стрим от одного из участников Laravel core-команды, где он демонстрирует процесс релиза пакетов Laravel.
Yii
Статьи
Аудио/Видео
Roadrunner — что дальше? [50] — Запись митапа с R&D командой SpiralScout про дальнейшие планы RoadRunner, а также про актуальные фичи.
Топ 10 трюков в PhpStorm [51] от Christoph Rumpel.
PHP Release Radar — Episode 12 [52]: Про CaptainHook [53] — менеджер Git-хуков.Подписывайтесь на Telegram-канал PHP Digest [54].
Этот дайджест подготовлен совместно с Insolita [2]. Если вам понравился выпуск, поставьте, пожалуйста, ему плюс.
Заметили ошибку или опечатку? Сообщите в личку хабра [55] или телеграм [56].
Прислать ссылку можно через форму [57] или просто написав мне в телеграм [56].
Поиск ссылок по всем дайджестам [58]
← Предыдущий выпуск: PHP-Дайджест № 213 [59]
Автор: Роман Пронский
Источник [60]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/php-2/369123
Ссылки в тексте:
[1] Иван Ганцев: https://t.me/phpshnik
[2] Insolita: https://twitter.com/DonnaInsolita
[3] OpenSwoole: https://github.com/openswoole/swoole-src
[4] этом треде на GitHub: https://github.com/swoole/swoole-src/issues/4434#issuecomment-942785077
[5] добавлен код: https://github.com/swoole/swoole-src/blob/1bc39175acb7d339a9d2d046e031dd9561adb1eb/ext-src/php_swoole_library.h#L7260-L7283
[6] Bruce Dou: https://twitter.com/doubaokun
[7] @doubaokun: https://github.com/doubaokun
[8] попытался: https://github.com/swoole/swoole-src/pull/4433/files
[9] @matyhtf: https://github.com/matyhtf
[10] объявил: https://news-web.php.net/php.pecl.dev/17446
[11] удалили: https://github.com/swoole/swoole-src/commit/0a869854fc71146d15a6e1b17386baa12d05ca78
[12] топ-10 контрибьюторов: https://github.com/swoole/swoole-src/graphs/contributors
[13] отказывался: https://twitter.com/doubaokun/status/1370745765774163970
[14] revoltphp/event-loop: https://github.com/revoltphp/event-loop
[15] ext-fiber: https://github.com/amphp/ext-fiber/
[16] PHP 7.4.25: https://www.php.net/ChangeLog-7.php#7.4.25
[17] PHP 8.0.12: https://www.php.net/ChangeLog-8.php#8.0.12
[18] PHP 8.1 RC4: https://www.php.net/archive/2021.php#2021-10-14-1
[19] Improvements to Array Spreading: https://front-line-php.com/videos/609789845-array-spreading
[20] Enums: https://front-line-php.com/videos/609789289-enums
[21] [RFC] Deprecate partially supported callables: https://wiki.php.net/rfc/deprecate_partially_supported_callables
[22] [RFC] Deprecate dynamic properties: https://wiki.php.net/rfc/deprecate_dynamic_properties
[23] Add loop mode (`-L`) in the CLI SAPI: https://github.com/mnapoli/php-src/pull/2
[24] Bref: https://bref.sh/
[25] добавили автодополнение команд в терминале: https://github.com/symfony/symfony/pull/42251
[26] История нового дизайна документации Symfony: https://symfony.com/blog/redesigning-the-symfony-docs-website
[27] symfony.com/doc: https://symfony.com/doc/current/index.html
[28] Неделя Symfony #773 (18-24 Октября 2021): https://symfony.com/blog/a-week-of-symfony-773-18-24-october-2021
[29] Laravel Tinker: https://plugins.jetbrains.com/plugin/14957-laravel-tinker
[30] spatie/laravel-site-search: https://github.com/spatie/laravel-site-search
[31] Meilisearch: https://github.com/meilisearch/MeiliSearch
[32] Статья: https://freek.dev/2106-a-laravel-package-to-crawl-and-index-content-of-your-sites
[33] видео: https://www.youtube.com/watch?v=rnBCrDzAzrw
[34] Как работает Livewire (очень подробно): https://calebporzio.com/how-livewire-works-a-deep-dive
[35] Тестирование сложных фич с помощью Laravel и Pest: https://www.youtube.com/watch?v=2anIAzai5wU
[36] Releasing Laravel: https://www.youtube.com/watch?v=MZS-WvYbCY8
[37] Yii View 4.0.0: https://github.com/yiisoft/yii-view/
[38] CSRF 1.1.0: https://github.com/yiisoft/csrf
[39] Html 2.2.0: https://github.com/yiisoft/html
[40] Symfony Mailer 1.0.0: https://github.com/yiisoft/mailer-symfony
[41] Как работает opсache: https://www.npopov.com/2021/10/13/How-opcache-works.html
[42] раннее связывание в PHP: https://www.npopov.com/2021/10/20/Early-binding-in-PHP.html
[43] Работа с деревьями в PHP: https://doeken.org/blog/tree-traversal-in-php
[44] HTTP-запросы со сжатием с помощью Curl и PHP: https://php.watch/articles/curl-php-accept-encoding-compression
[45] smknstd/modern-php-cheatsheet: https://github.com/smknstd/modern-php-cheatsheet
[46] Расширенные возможности MessagePack: https://dev.to/tarantool/advanced-messagepack-capabilities-4735
[47] Rector: https://github.com/rectorphp/rector
[48] Как использовать фреймворки требующие php>=8.1 на более старых версиях php: https://getrector.org/blog/how-all-frameworks-can-bump-to-php-81-and-you-can-use-older-php
[49] Как преобразовать аннотации в атрибуты: https://getrector.org/blog/how-to-upgrade-annotations-to-attributes
[50] Roadrunner — что дальше?: https://www.youtube.com/watch?v=uYPvYyYK4jQ
[51] Топ 10 трюков в PhpStorm: https://www.youtube.com/watch?v=vXjbgfqfUBk
[52] PHP Release Radar — Episode 12: https://www.youtube.com/watch?v=Wgg4xVz72G8
[53] CaptainHook: https://github.com/captainhookphp/captainhook
[54] PHP Digest: https://t.me/phpdigest
[55] личку хабра: https://habrahabr.ru/conversations/pronskiy/
[56] телеграм: https://t.me/pronskiy
[57] через форму: https://bit.ly/php-digest-add-link
[58] Поиск ссылок по всем дайджестам: https://pronskiy.com/php-digest/
[59] Предыдущий выпуск: PHP-Дайджест № 213: https://habr.com/ru/post/582776/
[60] Источник: https://habr.com/ru/post/585326/?utm_source=habrahabr&utm_medium=rss&utm_campaign=585326
Нажмите здесь для печати.