PHP Дайджест № 199 (8 – 22 февраля 2021)

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

В PHP 8.1 будет enum, и еще два принятых, два отклоненных и три новых RFC предложения для PHP 8.1. WordPress используется на 40% сайтов. Почему нужно убрать strict_types, почему не стоит использовать empty(), а также инструменты, видео, статьи, подкасты, и PHP Дайджест Live в 20:00 МСК.

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



Новости и релизы


  • PhpStorm 2021.1 EAP
    Продолжается программа раннего доступа IDE. В этом релизе фокус на стабильности и производительности, поэтому новых фич будет меньше. Тем не менее уже можно пощупать: новые инспекции и квик-фиксы, превью HTML в редакторе, и прочее.

    Также начиная 2020.3.1 теперь доступны аудио/видео звонки во время сессии совместного программирования через Code With Me.
  • xdebug.cloud
    Новый платный сервис от автора Xdebug, цель которого — упростить отладку PHP-приложений в более сложных сетевых конфигурациях, например, когда используется Docker, Vagrant, облачные сервисы.
  • Доля WordPress перевалила за 40% среди топ 10 млн сайтов — Подробнее о методологии используемой w3techs и исторический тренд.
  • habr Каким будет 2021-й год для PHP? — 27 февраля проведем video большой стрим.
  • 25 февраля, 19:00 МСК онлайн митап от PHP of By. Будет воркшоп «Описываем сложные бизнес-процессы на PHP» от Антона Титова про temporal.io.
  • Список всех ближайших мероприятий всегда доступен на phpcommunity.ru.

PHP Internals


  • check [RFC] Enumerations
    С результатом 44 против 7 голосование завершено. В PHP 8.1 будет enum.
    enum RfcStatus {
        case Draft;
        case UnderDiscussion;
        case Accepted;
    }
    
    function setRfcStatus(RfcStatus $status) :void {
        // ...
    }
    
    setRFCStatus(RfcStatus::Accepted); // Ок
    setRFCStatus('Draft');             // TypeError
    

    Подробнее про инамы можно прочитать в пересказах RFC в статье Брента и еще подробнее на php.watch.

    В Symfony уже открыли тикеты для добавления поддержки инамов.
  • check [RFC] Deprecate passing null to non-nullable arguments of internal functions
    В текущих версиях PHP стандартные функции без ошибок принимают null в качестве аргумента, когда параметр не nullable.

    А начиная с PHP 8.1 встроенные функции тоже будут бросать TypeError. Например, str_contains("", null). 3v4l.org/OVoa0A.

    Интересный факт: предложение принято единогласно, притом что это довольно крупная поломка обратной совместимости в PHP.
  • check [RFC] Array unpacking with string keys
    Предложение принято и в PHP 8.1 будет работать распаковка любых массивов, в том числе со строковыми ключами:
    $array1 = ['a' => 'apple', 'p' => 'pear'];
    $array2 = ['b' => 'banana', 'o' => 'orange'];
    $array = [...$array1, ...$array2];
    // Приблизительно то же самое что:
    $array = array_merge($array1, $array2);
    
  • [RFC] Fibers
    Из предложения по файберам был убран планировщик, потому что он сильно усложнял реализацию и вероятность принятия предложения.

    Теперь Fiber API предоставляет самый минимум и похож на аналогичные возможности в Ruby.

    Пример использования с ReactPHP trowski/react-fiber:
    Скрытый текст
    
    $loop = new FiberLoop(Factory::create());
    
    $browser = new Browser($loop);
    
    $request = function (string $method, string $url) use ($browser, $loop): void {
        /** @var Response $response */
        $response = $loop->await($browser->requestStreaming($method, $url));
    
        /** @var ReadableStreamInterface $stream */
        $stream = $response->getBody();
    
        $body = $loop->await(Stream\buffer($stream));
    
        var_dump(\sprintf(
            '%s %s; Status: %d; Body length: %d',
            $method,
            $url,
            $response->getStatusCode(),
            \strlen($body)
        ));
    };
    
    $requests = [];
    
    $requests[] = $loop->async($request, 'GET', 'https://reactphp.org');
    $requests[] = $loop->async($request, 'GET', 'https://google.com');
    $requests[] = $loop->async($request, 'GET', 'https://www.php.net');
    
    $loop->await(Promise\all($requests));
    
  • [RFC] CachedIterable (rewindable, allows any key&repeating keys)
    Tyson Andre предлагает добавить кеширующий итератор. Он сохраняет состояние любого итератора и внутри себя содержит иммутабельные копии его ключей и значений.
  • Proposal: namespace the SPL
    Обсуждается предложение создать неймспейс Spl и создать в нем алиасы для существующих классов: Spl\FixedArray -> SplFixedArray. А все новые классы, такие как CachedIterable и ReverseIterator уже вносит сразу в новый неймспейс.

    А пока в качестве альтернативы есть отличный инструмент azjezz/psl.
  • [RFC] mysqli bind in execute
    Kamil Tekiela продолжает инициативу по улучшению mysqli. В этом RFC предлагает добавить новый необязательный параметр в mysqli_stmt::execute(). Он будет принимать массив значений, которые автоматически биндятся, вместо отдельного вызова mysqli_stmt::bind_param(). В последний сейчас принимает только переменные по ссылке.
  • cross [RFC] PHP\iterable\any() and all() on iterables — Предложение добавить функции any() и all() для итераторов не прошло голосование.
  • cross [RFC] var_representation(): readable alternative to var_export() — Идея добавить альтернативу для var_export не нашла поддержки, поэтому пока используем юзерленд альтернативу brick/varexporter.
  • [Draft] Unify PHP's typing modes — В PHP по сути есть два режима типизации. Один — слишком слабый, а другой, – strict_types=1 – слишком строгий. Этот документ описывает причины существования этих двух режимов, их недостатки и что нужно сделать, чтобы объединять оба режима.

    Документ написан George Peter Banyard, и пока он не планирует его выдвигать в качестве официального RFC.

    Разберем его положения на стриме.
  • Об Observer API в PHP 8 — Статья о внутреннем API для отслеживания входа и выхода из функции. Он существенно упростил разработку расширений типа Xdebug, профайлеров и APM-решений New Relic, Tideways, и т.п.

Инструменты


  • renoki-co/php-k8s — Позволяет управлять ресурсами кубернетиса из PHP.
  • marcocesarato/php-conventional-changelog — Генерирует с changelog из сообщений коммитов.
  • andrey-helldar/package-wizard — CLI-инструмент для создания начальной структуры пакетов.
  • rryqszq4/ngx_php7 — Встраиваемый в nginx интерпретатор PHP. Позволяет создавать обработчики запросов на PHP, модифицировать запрос/ответ, фильтровать тело ответа и заголовки, и прочее.

Symfony


  • symfony/panther 1.0 — Компонент Symfony на основе Selenium WebDriver для E2E тестирования и скрапинга.
  • Tobias Nyholm: Как эффективно использовать компонент Symfony Lock на примере с Messenger
  • Аутентификация и авторизация пользователей с общей сессией в микросервисах.
  • Неделя Symfony #738 (15-21 февраля 2021)

Laravel


  • Тестирование middleware в Laravel.
  • Тред с советами по перфомансу Laravel.
  • video Laravel Internals #4 — Созвон команды Laravel.
  • habr Laravel–Дайджест (8–21 февраля 2021)

Yii


  • Пачка релизов компонентов Yii 3: yiisoft/files, yiisoft/var-dumper, yiisoft/auth-jw, yiisoft/log, yiisoft/event-dispatcher.

Async PHP


  • swow/swow — Расширение для PHP, которое предоставляет асинхронные возможности на базе libuv, включая асинхронный стрим, то есть из коробки работающие PDO, file_get_сontents() и т.п. (когда они обернуты в корутину). По сути, является минималистичным подмножеством Swoole.

phpstorm PhpStorm


  • video Как делать рефакторинг в PhpStorm от Christoph Rumpel.
  • 26 трюков и советов по PhpStorm

Статьи


  • Как защититься от Dependency Confusion в PHP.
  • Benjamin Eberlei: Когда использовать empty() в PHP? Я бы сказал никогда.
  • Введение в мутационное тестирование на PHP — Тестируем тесты.
  • ru MySQL под нагрузкой > 40000 QPS, что может пойти не так — Прислал Кирилл Егоров.
  • habr Решаем проблемы с интерпретацией ошибок в сервисной архитектуре.
  • habr Рефакторинг пет проекта: докеризация, метрики, тесты.
  • habr Невидимые символы, скрывающие веб-шелл в зловредном коде на PHP.
  • habr SafetyNet Attestation — описание и реализация проверки на PHP.
  • habr Tagged Unions в PHP (примерно как в Rust).
  • ru Дмитрий Елисеев: Структуры с процедурами или объекты?

Аудио/Видео


  • ruvideo Как регистрировать и тестировать shutdown функции — Новый ролик от Валентина Удальцова (Пых) на канале PHP Point.
  • ruvideo Мифы о производительности приложений на PHP (Роман Ананьев, Simtech Development)
  • ruvideo Онлайн митап от ВсеИнструменты.Ру о PHP, MySQL, нагрузки и асинхронность.
  • ruaudio Пятиминутка PHP №85 — Про карьерный рост от CTO до разработчика «руками», Apache Camel, PHP и ещё 4 языка с Евгением Сальниковым, тимлидом команды доставки в Lamoda.
  • video PHP Release Radar #5 — Про Flysystem 2 с ее автором Frank de Jonge.
  • audio PHP Internals News podcast с Никитой Поповым про принятые RFC для PHP 8.1: deprecate null, and array unpacking, restrict globals usage, and phase out serializable.

Занимательное


  • mario-deluna/php-render — 3D рендерер на чистом PHP, даже безШейде Шейдеры, парсер .obj файлов и прочее.
    Код примера:





Уже традиционный стрим по мотивам PHP Дайджеста. Будет разбор новостей и ссылок из выпуска с подробностями и дополнительными деталями.
Начало в 20:00 Москва, Минск / 19:00 Киев.



Если вы заметили ошибку или неточность — сообщите, пожалуйста, в личку хабра или телеграм.

Больше новостей и комментариев в Telegram-канале PHP Digest.

Прислать ссылку
Поиск ссылок по всем дайджестам
← Предыдущий выпуск: PHP-Дайджест № 198
Источник: https://habr.com/ru/post/543628/


Интересные статьи

Интересные статьи

Подборка свежих уроков, видео и пакетов по фреймворку Laravel за неделю. Читать дальше →
Всем привет! Продолжаем дайджесты новостей и других материалов о свободном и открытом ПО и немного о железе. Всё самое главное про пингвинов и не только, в России и мире. MTC введё...
Всем привет! Не так давно на работе в рамках тестирования нового бизнес-процесса мне понадобилась возможность авторизации под разными пользователями. Переход в соответствующий р...
Предлагаем вашему вниманию подборку с ссылками на новые материалы из области фронтенда и около него. Читать дальше →
Сегодня мы поговорим о перспективах становления Битрикс-разработчика и об этапах этого пути. Статья не претендует на абсолютную истину, но даёт жизненные ориентиры.