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

в 10:28, , рубрики: laravel, php, PHP 8.1, PHP 8.2, php-дайджест, symfony, yii, дайджест, Разработка веб-сайтов

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

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

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

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

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

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

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

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

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

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

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

    Это, конечно же, можно расценивать как проблему безопасности. Один из контрибьюторов 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 Дайджест № 214 (11 – 25 октября 2021) - 6 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 и подобных окружений.

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.

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

Заметили ошибку или опечатку? Сообщите в личку хабра или телеграм.

Прислать ссылку можно через форму или просто написав мне в телеграм.
Поиск ссылок по всем дайджестам
Предыдущий выпуск: PHP-Дайджест № 213

Автор: Роман Пронский

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js