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

PHP Дайджест № 214 (11 – 25 октября 2021)

PHP Дайджест № 214 (11 – 25 октября 2021) - 1

Фото: Иван Ганцев [1].

Подборка свежих новостей и материалов из мира PHP.

Конфликт вокруг расширения Swoole и создание форка OpenSwoole; асинхронные фреймворки Amp и ReactPHP выпустили общую реализацию ивент-лупа; PHP 8.1 RC 4; принят первый RFC для 8.2.

Также в выпуске два поста от Никиты Попова, полезные статьи, видео.

Приятного чтения!

Этот дайджест подготовлен совместно с Insolita [2]. Если понравился выпуск, плюсаните пост, пожалуйста.

PHP Дайджест № 214 (11 – 25 октября 2021) - 2 Новости

  • Конфликт вокруг Swoole привел к созданию форка OpenSwoole [3]

    Вся суть конфликта изложена в этом треде на GitHub [4].

    В Swoole был добавлен код [5], который что-то скачивает с закрытого ресурса:
    PHP Дайджест № 214 (11 – 25 октября 2021) - 3

    Это, конечно же, можно расценивать как проблему безопасности. Один из контрибьюторов Swoole, Bruce Dou [6] @doubaokun [7], указал на эту проблему.

    Позже, doubaokun попытался [8] расширить свои права и выпустить релиз расширения на PECL. Его изменения откатили, а он в ответ накатил их снова и в закрытом чате высказывался непотребно в сторону автора Swoole @matyhtf [9]. После чего у Bruce Dou отобрали права доступа к репозиторию и тогда он объявил [10] о создании своего форка.

    История со скачиванием файлов с стороннего сервера, конечно, портит репутацию Swoole. Но я склонен больше доверять авторам расширения, чем Bruce Dou. Вот почему:

    • Проблемный кусок кода быстро удалили [11]. По словам авторов, планировалось реализовать дашборд для Swoole с отображением всяких метрик. Этот дашборд будет открыт в отдельном расширении.
    • Создатель форка за 9 лет существования Swoole сделал всего 49 коммитов и не входит даже в топ-10 контрибьюторов [12].
    • Во время обсуждения RFC файберов, автор форка довольно токсично высказывался в твиттере, при этом отказывался [13] писать в Internals по существу.

    Тем не менее стоит отдать должное Bruce Dou, за то, что поддерживал официальный сайт, твиттер и Slack-сообщество Swoolе и вообще занимался популяризацией расширения.

    Будем наблюдать за Swoole и OpenSwoole.

  • Amphp и ReactPHP объединили усилия и опубликовали revoltphp/event-loop [14]

    Команды разработчиков двух популярных асинхронных фреймворков Amphp и ReactPHP выпустили совместную абстракцию событийного цикла на основе файберов.

    Файберы будут доступны в PHP 8.1+ из коробки, а на PHP 8.0 можно поставить расширение ext-fiber [15].

    По умолчанию ивент-луп работает с использованием системного вызова select. Также поддерживаются низкоуровневые событийные библиотеки ev, event и uv. Последняя, к слову, используется в Node.js для ивент-лупа.

    Следующие версии Amp и ReactPHP не будут поставляться с собственной реализацией цикла событий, а будут напрямую использовать RevoltPHP.

  • PHP 7.4.25 [16], PHP 8.0.12 [17]

    Багфиксы для актуальных веток.

  • PHP 8.1 RC4 [18]

    Четвертый релиз-кандидат доставлен по расписанию. Впереди еще как минимум два.

    Пара свежих видео от Brent Roose:

  • Классный видеоролик — PHP за 100 секунд:

PHP Дайджест № 214 (11 – 25 октября 2021) - 6 PHP Internals

  • [RFC] Deprecate partially supported callables [21]

    Предложение принято. В 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 [22]

    В текущих версиях 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 [23]

    Интересная идея от Matthieu Napoli, автора Bref [24].

    Предлагается добавить режим «цикла» для PHP: php -L script.php.

    Это как если запустить скрипт в цикле while(true) {}, но только на каждой итерации скрипт изолирован. По сути, это клон поведения PHP-FPM (worker) для CLI.

    Такой режим может пригодиться для всяких воркеров, AWS Lambda и подобных окружений.

PHP Дайджест № 214 (11 – 25 октября 2021) - 7 Symfony

PHP Дайджест № 214 (11 – 25 октября 2021) - 8 Laravel

PHP Дайджест № 214 (11 – 25 октября 2021) - 11 Yii

PHP Дайджест № 214 (11 – 25 октября 2021) - 12 Статьи

PHP Дайджест № 214 (11 – 25 октября 2021) - 13 Аудио/Видео


Подписывайтесь на 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