
Свежая подборка со ссылками на новости и материалы. В выпуске: Fibers для асинхронного PHP, первые нативные атрибуты, короткий match и другие RFC предложения для PHP 8.1, инструменты, много видео, статьи и подкасты. 
Приятного чтения и с наступающим Новым годом!
 PHP Internals
 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.
 
 Теперь предлагается более простое и понятное решение — Добавить атрибут для параметров, в котором можно указывать алиас, то есть альтернативное имя.
 Пока открытый вопрос будет ли добавлен флаг<?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)дефолтным.
 В обсуждении много критики на тему избыточности такого «сахара».В 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
 Symfony
- Неделя Symfony #729 (14-20 декабря 2020)
 Использование Symfony HttpClient для запросов к сторонним API Использование Symfony HttpClient для запросов к сторонним API
 Laravel
 Laravel
- Приоритеты конфигураций при тестировании Laravel
- Устанавливаем Blackfire на Laravel Vapor
 Как я пытался улучшить Laravel, а сделал только хуже Как я пытался улучшить Laravel, а сделал только хуже
 Стрим от Freek Murzee, где он рефакторит одно из своих приложений Стрим от Freek Murzee, где он рефакторит одно из своих приложений
 Laravel Internals #3 — Стрим с командой Laravel в полном составе. Laravel Internals #3 — Стрим с командой Laravel в полном составе.
 Подкаст Тейлора Laravel Snippet #24: Fortify, Jetstream, Breeze Подкаст Тейлора Laravel Snippet #24: Fortify, Jetstream, Breeze
 Yii
 Yii
- Yii 2.0.40
- yiisoft/test-support — Пакет предназначен для упрощения тестирования элементов, зависящих от PSR-интерфейсов.
 Статьи
 Статьи
- Это не легаси код, это PHP — Вдохновляющая заметка Matt Brown, автора Psalm, о том как и почему они используют PHP в Vimeo.
- Почему стоит избегать опциональные параметры
- Коммиты – это снимки, а не диффы — Отличный пост от GitHub по основам Git.
- Обзор Flysystem 2.0 от мейнтейнера библиотеки.
 За что я люблю Magento 2 За что я люблю Magento 2
 Занятное мини-интервью с основными контрибьюторами PHP 8 Занятное мини-интервью с основными контрибьюторами PHP 8
 Сравнение производительности Xdebug 2 и Xdebug 3 Сравнение производительности Xdebug 2 и Xdebug 3
Сообщество
- Итоги 2020 от Freek Van der Herten
- Phalcon v5 — продолжают переписывать на PHP
- У PHP-FIG появился официальный Discord сервер
 Видео
 Видео
  Трейты в PHP — зло? Валентин Удальцов против всех Часть 1 (интро), Часть 2 (основная) Трейты в PHP — зло? Валентин Удальцов против всех Часть 1 (интро), Часть 2 (основная)
  Дмитрий Елисеев: Как бэкендеру понять фронтенд Дмитрий Елисеев: Как бэкендеру понять фронтенд
  Публичное собеседование: PHP-программист [Хекслет] Публичное собеседование: PHP-программист [Хекслет]
  PHP для начинающих программистов: плюсы, минусы, эволюция языка и курсы [Хекслет] PHP для начинающих программистов: плюсы, минусы, эволюция языка и курсы [Хекслет]
  Строим Highload на PHP и Redis (Михаил Мазеин, ManyChat). Строим Highload на PHP и Redis (Михаил Мазеин, ManyChat).
  Егор Бугаенко про PHP 8 — Интересное мнение и прогноз развития языков программирования. Спасибо Пятиминутка PHP за наводку. Егор Бугаенко про PHP 8 — Интересное мнение и прогноз развития языков программирования. Спасибо Пятиминутка PHP за наводку.
 PHP code review: upload-to-s3-webhook — Публичное код-ревью от Mathew Napoli, автора Bref. PHP code review: upload-to-s3-webhook — Публичное код-ревью от Mathew Napoli, автора Bref.
 О режимах работы в Xdebug 3 — Видео от автора Xdebug о конфигурации отладчика/профайлера/сборщика покрытия. О режимах работы в Xdebug 3 — Видео от автора Xdebug о конфигурации отладчика/профайлера/сборщика покрытия.
 Занимательное
 Занимательное
- elephpant PHP8: InPHPinity is born — Доступен для предзаказа новый слоник PHP 8:
  
Сегодня будет второй стрим по PHP Дайджесту. Все новости и ссылки из выпуска + больше деталей, обзор присланного, интересное но не вошедшее в выпуск, результаты розыгрыша и новый конкурс со слониками.
Начало в 20:00 Москва, Минск / 19:00 Киев.
Опрос: Подводим итоги PHP-года и разыгрываем слона
 Если вы заметили ошибку или неточность — сообщите, пожалуйста, в личку хабра или телеграм.
Больше новостей и комментариев в Telegram-канале PHP Digest.
Прислать ссылку
Поиск ссылок по всем дайджестам
< Предыдущий выпуск: PHP Дайджест № 194
 
           
 



AlexPTS
Уже не плохо выглядят примеры ext-fiber с EventLoop. Этого действительно не хватало, переписывать старый код на промисы/генераторы очень затратно. С файберами можно будет точечно подменить блокирующие реализации на асинхронные. Сейчас без fiber только с пулом процессов без рефакторинга можно работать (PhpPM, RoadRunner). Жду стабильной версии :)