PHP-Дайджест № 178 (6 – 21 апреля 2020)

ek6rr1odvyzb89tfv0lq4cmfxi4.jpeg

Свежая подборка со ссылками на новости и материалы. В выпуске: Composer 2.0 Alpha и другие релизы, 5 новых и одно принятое RFC предложение из PHP Internals, а также обновленные атрибуты на голосовании, порция полезных инструментов, подкасты, интервью и многое другое.

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


f574e9991c42407b8fa789a66b854f8d.png Новости и релизы


c9ee7880391644e4aef6cc28ca681ab0.png PHP Internals


  • [RFC] throw expression — Предложение принято и в PHP 8 throw будет не оператором, а выражением. Это значит, что возможно будет бросать исключение в коротких лямбдах, в тернарных операторах и других конструкциях:
    $callable = fn() => throw new Exception();
    
    $foo = $bar['key'] ?? throw new KeyNotSetOnBarException();
    
  • [RFC] Attributes v2 — Предложение по атрибутам (аннотациям) было сильно доработано. В частности, добавлена поддержка нескольких атрибутов с одним именем, атрибуты для параметров функций, разделение на пользовательские атрибуты и атрибуты компилятора, возможность валидация атрибутов компилятора на этапе компиляции. А вот вложенные атрибуты в данной реализации не поддерживаются.
    Судя по ходу голосования, у него все шансы быть принятым. Также на голосование вынесен вопрос о синтаксисе: использовать <<>> или @:.
    Скрытый текст
    <>
    class Foo
    {
        <>
        public const FOO = 'foo';
    
        <>
        public $x;
    
        <>
        public function foo(<> $bar) { }
    }
    
    $object = new <> class () { };
    
    <>
    function f1() { }
    
    $f2 = <> function () { };
    
    $f3 = <> fn () => 1;
    
  • [RFC] PHP Namespace in core, [RFC] PHP Namespace Policy — Сразу два почти идентичных RFC-документа, в которых предлагается использовать неймспейс \PHP в качестве корневого для различных внутренних сущностей, например для планируемых аттрибутов.
  • [RFC] Mixed Type v2 — Сейчас если у функции не указан возвращаемый тип, то непонятно то ли разработчик забыл указать, то ли сознательно не указал по какой-любо причине. К тому же псевдотип mixed уже используется повсюду в документации.
    Предлагается добавить его в PHP 8. Тип mixed будет эквивалентен объединению типов array|bool|callable|int|float|null|object|resource|string.
  • [RFC] non-capturing catches — Предлагается сделать возможным опускать объявление переменной в блоке catch:
    Скрытый текст
    try {
        changeImportantData();
    } catch (PermissionException) { // The intention is clear: exception details are irrelevant
        echo "You don't have permission to do this";
    }
    
  • [RFC] Match expression — Вместо переделывания конструкции switch в выражение предлагается ввести новое выражение match, которое лишено всех недостатков switch, таких как отсутствие проверки типа и возможности возвращать значение. Также в будущем оно может быть дополнено до полноценного паттерн-мэтчинга.
    Скрытый текст
    match ($condition) {
        1 => {
            foo();
            bar();
        },
        2 => baz(),
    }
    
    $expressionResult = match ($condition) {
        1, 2 => foo(),
        3, 4 => bar(),
        default => baz(),
    };
    
  • [RFC] Pipe Operator v2 — Вторая попытка внести оператор |> для последовательного вызова функций c передачей результата предыдущей в качестве аргумента следующей. Семантика полностью копирует реализации в Elixir / JS и от первого варианта (Hack) отличается отсутствием магии использования метки $$.
    $result = "Hello World"
        |> 'htmlentities'
        |> 'explode'
        |> fn($x) => array_map(fn($v) => 'strtoupper', $x)
        |> fn($x) => array_filter(fn($v) => $v != 'O');
    
  • Отклонено: [RFC] Compact Object Property Assignment


cf862d9072784d04b621238ec137f2ca.png Инструменты


  • jlaswell/compote — Легковесный менеджер зависимостей для PHP написанный на Go. Не призван заменить Composer, а дополняет его для специфичных задач, например, для CI. Сейчас умеет только устанавливать залоченные зависимости.
  • repman.io — Приватный репозиторий пакетов и прокси для Composer.
    Также предоставляет глобальный прокси с CDN для packagist.org, что позволяет ускорить скачивание пакетов.
  • dantleech/what-changed — Плагин для Composer, который сгенерирует отчет со списками изменений в пакетах, обновленных после запуска composer update.
  • maciejczyzewski/bottomline — Аналог lodash / underscore для PHP. Мелкие полезные функции на каждый день для строк/массивов/объектов.
  • VKCOM/noverify v0.2.0 — Статический анализатор для PHP на Go. В релизе улучшена поддержка PHP 7, больше анализаторов, меньше ложных срабатываний.
  • markrogoyski/math-php 1.0 — Первый стабильный релиз математической библиотеки для PHP. Реализованы возможности для работы с матрицами/векторами, численный анализ, статистика и другое. Прислал @dmitrybalabka.


96b65e92179a40f2bd1884549973ddd5.png Symfony


314bd0f0dfc54e3fa7f0c0daef1a2d25.png Laravel


pjlkob5btqut7it5e_eod-qtqh0.png Laminas


Async PHP


  • hyperf/hyperf — Фреймворк для создания сервисов на базе корутин Swoole. Прислал @dmitrybalabka.
  • clue/reactphp-flux — Пакет позволяет ограничить количество одновременно выполняемых конкурентных задач в ReactPHP.


329bec7c1e914963a1c5d2f2bfe99995.png Материалы для обучения


8dcc236774104f8286a40ceaea553820.png Аудио/Видео

Спасибо за внимание!

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

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

Прислать ссылку
Поиск ссылок по всем дайджестам
← Предыдущий выпуск: PHP-Дайджест № 177

© Habrahabr.ru