Русский
Русский
English
Статистика
Реклама

PHP-Дайджест 195 (14 28 декабря 2020)


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



PHP Internals


  • [RFC] Fibers Большое предложение по асинхронному PHP. Подробнее было в телеграм-канале. Если коротко, то это улучшенная версия генераторов, которая позволит писать асинхронный код на основе библиотек типа ReactPHP / Amp гораздо проще и понятнее.


    Amp v3 еще находится в разработке, но уже использует файберы вместо промисов. Вот пример как выглядит аналог async/await:
    use Amp\Delayed;use Amp\Loop;use function Amp\async;use function Amp\await;// Обратите внимание, что замыкание объявляет 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.

    Теперь предлагается более простое и понятное решение Добавить атрибут для параметров, в котором можно указывать алиас, то есть альтернативное имя.
    <?phpuse NamedParameterAlias;// Old function signature:function log($arg1) {}// New function signature introduces better namefunction 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) дефолтным.
    В PHP 8.0:
    $a = 3;print match (true) {  $a < 2 => 'small',  $a == 3 => 'medium',  default => 'large',};
    
    Предлагается:
    $a = 3;print match {  $a < 2 => 'small',  $a == 3 => 'medium',  default => 'large',};
    
    В обсуждении много критики на тему избыточности такого сахара.
  • [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
Источник: habr.com
К списку статей
Опубликовано: 28.12.2020 12:07:24
0

Сейчас читают

Комментариев (0)
Имя
Электронная почта

Разработка веб-сайтов

Php

Symfony

Yii

Laravel

Дайджест

Php-дайджест

Php 8.1

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru