Прежде чем перейти к статье, хочу вам представить, экономическую онлайн игру Brave Knights, в которой вы можете играть и зарабатывать. Регистируйтесь, играйте и зарабатывайте!
Свежая подборка со ссылками на новости и материалы. В выпуске: Composer 2.0 Alpha и другие релизы, 5 новых и одно принятое RFC предложение из PHP Internals, а также обновленные атрибуты на голосовании, порция полезных инструментов, подкасты, интервью и многое другое.
Приятного чтения!
Новости и релизы
- PHP 7.4.5, PHP 7.3.17, PHP 7.2.30
- Composer v2.0 Alpha — Что нового будет в следующей версии композера и как его попробовать прямо сейчас. Подробнее в канале.
- PhpStorm 2020.1: поддержка composer.json, инструменты для PHPUnit, покрытие кода с PCOV и PHPDBG, Grazie и другое.
- PHP онлайн-митап совместно с PHPofBY — 25 апреля, суббота, c 11:50 до 16:00 MSK. 5 докладов, треп в чатике, живые обсуждения в Zoom. Запись прошлого раза.
PHP Internals
- [RFC] throw expression — Предложение принято и в PHP 8
throw
будет не оператором, а выражением. Это значит, что возможно будет бросать исключение в коротких лямбдах, в тернарных операторах и других конструкциях:$callable = fn() => throw new Exception(); $foo = $bar['key'] ?? throw new KeyNotSetOnBarException();
- [RFC] Attributes v2 — Предложение по атрибутам (аннотациям) было сильно доработано. В частности, добавлена поддержка нескольких атрибутов с одним именем, атрибуты для параметров функций, разделение на пользовательские атрибуты и атрибуты компилятора, возможность валидация атрибутов компилятора на этапе компиляции. А вот вложенные атрибуты в данной реализации не поддерживаются.
Судя по ходу голосования, у него все шансы быть принятым. Также на голосование вынесен вопрос о синтаксисе: использовать<<>>
или@:
.Скрытый текст<<ExampleAttribute>> class Foo { <<ExampleAttribute>> public const FOO = 'foo'; <<ExampleAttribute>> public $x; <<ExampleAttribute>> public function foo(<<ExampleAttribute>> $bar) { } } $object = new <<ExampleAttribute>> class () { }; <<ExampleAttribute>> function f1() { } $f2 = <<ExampleAttribute>> function () { }; $f3 = <<ExampleAttribute>> 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
Инструменты
- 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.
Symfony
- migrify/symfony-route-usage — Поможет найти неиспользуемые маршруты в Symfony. Пост с описанием.
- Как перенести спагетти-код в 304 контроллера на Symfony 5
- Как переиспользовать код с бандлами Symfony 5? Часть 1. Минимальный бандл.
- Правильная регистрация консольных команд Symfony в DI.
- Неделя Symfony #694 (13-19 апреля 2020)
Laravel
- Используем event sourcing в традиционном Laravel приложении.
- Динамические связи в Laravel с использованием подзапросов.
- Как лучше передавать аргументы в middleware на Laravel.
- О красоте контроллеров с единственным экшном.
- Продвинутая система авторизации действий с ресурсами в Laravel. Часть 1. Модель, Контроллер, Часть 2. Шлюзы, Политики
- Core-разработчик Laravel Mohamed Said рассказывает на видео как в Laravel работает CSRF-защита, CORS, аутентификация и HTTP Middleware.
- The Laravel Podcast – The Ethos of Laravel, with Taylor Otwell
Laminas
- April 2020 Technical Steering Committee Meeting
Async PHP
- hyperf/hyperf — Фреймворк для создания сервисов на базе корутин Swoole. Прислал @dmitrybalabka.
- clue/reactphp-flux — Пакет позволяет ограничить количество одновременно выполняемых конкурентных задач в ReactPHP.
Материалы для обучения
- Пишем игру «змейка» на PHP с помощью joseph-montanez/raylib-php.
- О тестировании плагинов для Composer.
- Улучшите архитектуру с помощью CQRS.
- Web Application Architecture — Новая книга от Matthias Noback.
- PHP Mentors — Книга, в которой известные деятели PHP-сообщества отвечают вопросы.
- Doctrine ResultSetMapping на примерах.
Аудио/Видео
- PHP Internals News #49 — С Jakob Givoni об [RFC] Compact Object Property Assignment.
- PHP Internals News #48 — О JIT в PHP 8 с Sara Golemon.
- Между Скобок № 4 — Михаил Мазеин рассказывает о том, как в компании Many Chat построили хайлоад на Redis и PHP.
- Между Скобок № 3 — С Дмитрием Симушевым об опыте перехода с Doctrine ORM к CQRS.
- Moreview #3 | Александр Афенов — Руководитель направления разработки в Lamoda про onboarding, поддержку и управление разработки.
- Moreview #2 | Александр Макаров — Разработчик фреймворка Yii2 про опенсорс и мир IT. Текстовая расшифровка.
- Советы по настройке внешнего вида и навигации в PhpStorm от @christophrumpel.
- Визуальное восприятие кода — Как вид кода оказывает влияние на нашу производительность.
Спасибо за внимание!
Если вы заметили ошибку или неточность — сообщите, пожалуйста, в личку.
Вопросы и предложения пишите на почту или в твиттер.
Больше новостей и комментариев в Telegram-канале PHP Digest.
Прислать ссылку
Поиск ссылок по всем дайджестам
← Предыдущий выпуск: PHP-Дайджест № 177