Свежая подборка со ссылками на новости и материалы. В выпуске: Fibers для асинхронного PHP, первые нативные атрибуты, короткий match и другие RFC предложения для PHP 8.1, инструменты, много видео, статьи и подкасты.

Приятного чтения и с наступающим Новым годом!

PHP Internals

  • [RFC] Fibers — Большое предложение по асинхронному PHP. Подробнее было в телеграм-канале. Если коротко, то это улучшенная версия генераторов, которая позволит писать асинхронный код на основе библиотек типа ReactPHP / Amp гораздо проще и понятнее.
    Amp v3 еще находится в разработке, но уже использует файберы вместо промисов. Вот пример как выглядит аналог async/await:
    use AmpDelayed;
    use AmpLoop;
    use function Ampasync;
    use function Ampawait;
    
    // Обратите внимание, что замыкание объявляет int возвращаемым типом, а не промис или генератор, но при этом исполняется как корутина.
    $callback = function (int $id): int {
        return await(new Delayed(1000, $id)); // Await promise resolution.
    };
    
    // Вызов $callback возвращает int, but is executed asynchronously.
    $result = $callback(1); // Вызывает корутину внутри этого зеленого потока, занимает 1 секунду.
    var_dump($result);
    
    // Одновременно запускает два новых зелёных потока, ждет их результата в этом основном зелёном потоке.
    $result = await([  // Выполняется одновременно, вызов займет только 1 секунду.
        async($callback, 2),
        async($callback, 3),
    ]);
    var_dump($result); // Выполнится через 2 секунды после старта всего скрипта.
  • [RFC] #[Deprecated] Attribute — В PHP 8 добавлена поддержка атрибутов, но без самих атрибутов. Предложен первый официальный атрибут — это #[Deprecated] для пометки устаревших методов и функций. Если вызвать функцию или метод, которые помечены атрибутом #[Deprecated], то PHP выбросит ошибку уровня E_DEPRECATED.

    Устаревшие классы, свойства, константы пока нельзя будет пометить таким атрибутом.

    Аналогичный, но чуть более продвинутый атрибут уже есть в PhpStorm 2020.3. Кроме отметки, он предлагает еще и вариант замены. Правда, из-за того что нативный атрибут может быть только final, пока неясно как красиво использовать оба.

  • [RFC] #[NamedParameterAlias] Attribute — Еще одна идея атрибута для PHP 8.1.

    Во время обсуждения и голосования за именованные аргументы, был один наиболее спорный момент — это проблемы обратной совместимости при переименовании. Разработчики библиотек справедливо указывали на то, что имена параметров публичных методов теперь станут часть API и их нельзя будет легко изменить.

    На эту тему даже обсуждался отдельный RFC: Named Parameters explicit opt in.

    Теперь предлагается более простое и понятное решение — Добавить атрибут для параметров, в котором можно указывать алиас, то есть альтернативное имя.

    <?php
    
    use NamedParameterAlias;
    
    // Old function signature:
    function log($arg1) {}
    
    // New function signature introduces better name
    function log(#[NamedParameterAlias("arg1")] $message) {}
    
    log(arg1: "Hello World!");
    log(message: "Hello World!");
    

    Пока открытый вопрос будет ли добавлен флаг Attribute::IS_REPEATABLE. Если да, то можно будет добавить сколько угодно алиасов для параметра.

  • [RFC] Short match — Выражение match в PHP 8 предлагается как альтернатива switch.

    Иногда можно встретить код вида switch(true) { ... , вместо цепочки if-elseif-...else. В таком же стиле можно использовать и match(true).

    Данный RFC предлагает сделать условие в match необязательным а поведение match(true) дефолтным.

    В обсуждении много критики на тему избыточности такого «сахара».

  • [RFC] Configurable callback to dump results of expressions in `php -a` — Tyson Andre предлагает добавить возможность задавать колбэк отрабатывающий на вывод из интерактивного шелла php -a.

    В отличие от bobthecow/psysh, встроенный в PHP шелл умеет корректно обрабатывать фатальные ошибки. Так что данное улучшение может быть полезным для других шеллов.

  • [RFC] Add is_list(mixed $value): bool — Еще один RFC от Tyson Andre. Предлагается добавить функцию is_list(), которая вернет true, если передать в нее массив с последовательными целочисленными ключами 0, 1, 2 ... count($value)-1.
  • [PR] Add support for property initialization during cloning — В этом пул-реквесте представлена реализация небольшого улучшения синтаксиса для клонирования иммутабельных объектов.
    Скрытый текст
    class Foo
    {
        public $bar;
        public $baz;
    
        public function withProperties($bar, $baz)
        {
            $self = clone $this;
            $self->bar = $bar;
            $self->baz = $baz;
    
            return $self;
        }
    }
    
    class Foo
    {
        public $bar;
        public $baz;
    
        public function withProperties($bar, $baz)
        {
            return clone $this with {
                bar: $bar,
                baz: $baz,
            };
        }
    }
    

Инструменты

  • Rector 0.9 — Инструмент для автоматических рефакторингов и обновления кода, например, на PHP 8.
  • FriendsOfPHP/proxy-manager-lts — Форк популярного пакета Ocramius/ProxyManager/ с расширенной обратной совместимостью и поддержкой PHP >=7.1.
  • fullpipe/check-them — Проверка внешних сервисов на доступность. Прислал fullpipe1.
  • multiavatar/multiavatar-php — Скрипт позволяет генерировать забавные аватары для пользователей по их юзернейму (строке). Например для ‘php’:
  • dantleech/maestro2 — Менеджер PHP-репозиториев — как ansible только для PHP пакетов. Пример использования для миграции на GitHub Actions. Пост в поддержку.
  • matomo-org/matomo 4.0 — Открытый аналог Google Analytics реализованный на PHP. Ранее известен как Piwik.
  • jolicode/JoliNotif — Пакет для отправки уведомлений на рабочий стол из PHP-скрипта. Работает с Win, macOS, Linux.
  • skrtdev/NovaGram — Библиотека с простым API для создания Телеграм-ботов.

Symfony

Laravel

Yii

  • Yii 2.0.40
  • yiisoft/test-support — Пакет предназначен для упрощения тестирования элементов, зависящих от PSR-интерфейсов.

Статьи

Сообщество

Видео

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


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


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

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

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

Let’s block ads! (Why?)

Read More

Recent Posts

Apple возобновила переговоры с OpenAI и Google для интеграции ИИ в iPhone

Apple возобновила переговоры с OpenAI о возможности внедрения ИИ-технологий в iOS 18, на основе данной операционной системы будут работать новые…

1 день ago

Российская «дочка» Google подготовила 23 иска к крупнейшим игрокам рекламного рынка

Конкурсный управляющий российской «дочки» Google подготовил 23 иска к участникам рекламного рынка. Общая сумма исков составляет 16 млрд рублей –…

2 дня ago

Google завершил обновление основного алгоритма March 2024 Core Update

Google завершил обновление основного алгоритма March 2024 Core Update. Раскатка обновлений была завершена 19 апреля, но сообщил об этом поисковик…

2 дня ago

Нейросети будут писать тексты объявления за продавцов на Авито

У частных продавцов на Авито появилась возможность составлять текст объявлений с помощью нейросети. Новый функционал доступен в категории «Обувь, одежда,…

2 дня ago

Объявлены победители международной премии Workspace Digital Awards-2024

24 апреля 2024 года в Москве состоялась церемония вручения наград международного конкурса Workspace Digital Awards. В этом году участниками стали…

2 дня ago

Яндекс проведет гик-фестиваль Young Con

27 июня Яндекс проведет гик-фестиваль Young Con для студентов и молодых специалистов, которые интересуются технологиями и хотят работать в IT.…

3 дня ago