Свежая подборка со ссылками на новости и материалы. В выпуске: обновления PHP и Composer 1.10, переносы конференций, 3 новых RFC предложения из PHP Internals, порция полезных инструментов, видео, подкасты и многое другое.
Приятного чтения!
Новости и релизы
- PHP 7.4.4, PHP 7.3.16, PHP 7.2.29 — Секьюрити релизы, всем рекомендуется обновиться.
- Composer 1.10.0 — Среди прочих изменений, добавлено новое поле «funding» в composer.json, в котором можно указать, как поддержать проект. По умолчанию данные берутся из FUNDING.yml на GitHub. Также добавлена новая команда
composer fund
, которая показывает информацию о спонсорстве для ваших зависимостей. - Перенос мероприятий
В связи с эпидемией и ограничительными мерами, многие мероприятия перенесены или переходят в онлайн.
• PHP Russia – Конференция перенесена, а 13 мая пройдёт первая PHP Russia Online.
• Митапы PHP-сообществ в марте, которые переходят в онлайн или переносятся.
• Переходят в онлайн: Laracon EU Madrid, Midwest PHP.
PHP Internals
- [RFC] str_contains — Предложение принято. Функция
str_contains()
будет проверять, содержится ли строка в другой строке. - [RFC] throw expression — В PHP нельзя бросить исключение из стрелочной функции, потому что
throw
– это оператор, а не выражение. Предлагается сделать его выражением и тогда возможно будет использование в коротких лямбдах, в тернарных операторах и других конструкциях:$callable = fn() => throw new Exception(); $value = $nullableValue ?? throw new InvalidArgumentException(); $value = $falsableValue ?: throw new InvalidArgumentException(); $value = !empty($array) ? reset($array) : throw new InvalidArgumentException();
- [RFC] Compact Object Property Assignment — Предлагается добавить компактный синтаксис для присвоения значений нескольким свойствам объекта в одном выражении. Идея уже раньше рассматривалась в рамках [RFC] Object Initializer, но не прошла голосование. На этот раз синтаксис весьма странный:
doTheFoo((new Foo)->[ a = 1, b = 2, c = 3, ]); // Эквивалентно: $myObj = new Foo(); $myObj->a = 1; $myObj->b = 2; $myObj->c = 3; doTheFoo($myObj);
- [RFC] Is Literal Check — Предлагается добавить функцию
is_literal()
, чтобы разработчики/фреймворки могли быть уверены, что они работают с безопасным значением, то есть созданным из одного или нескольких литералов, опредёленных в PHP, а не сформированных динамически из пользовательского ввода.define('TABLE', 'example'); $sql = 'SELECT * FROM ' . TABLE . ' WHERE id = ?'; is_literal($sql); // Returns true $sql .= ' AND id = ' . mysqli_real_escape_string($db, $_GET['id']); is_literal($sql); // Returns false
К предложению много вопросов, и реализация нетривиальная. Похоже, шансов мало.
- [RFC] Write-Once Properties — Судя по ходу голосования за неизменяемые свойства, предложение в текущем виде не преодолеет порог. Одним из основных аргументов против является тот факт, что свойства, объявленные неизменяемыми, нельзя будет изменить даже изнутри класса.
- Отличный репозиторий с описанием всех непринятых RFC пополнился статьёй о пропуске дефолтных значений при вызове функций.
Все статьи содержат описания трудностей и прогнозы дальнейшей судьбы.
Ещё автор добавил статью Understanding RFC attitudes о том, почему вообще какие-то предложения проходят, а какие-то нет, и как участники PHP Internals оценивают RFC.
Инструменты
- async-aws/aws — Легковесная и асинхронная альтернатива официальному SDK для AWS.
- lisachenko/z-engine — NightTiger продолжает демонстрировать все новые возможности PHP благодаря FFI.
В документации пример создания расширения для PHP на PHP, с помощью которого данные можно сохранять в памяти между запросами. - Badcow/DNS — Объектное представление записей DNS в PHP, а также парсер и билдер записей.
- yswery/PHP-DNS-SERVER — И полноценный DNS-сервер, написанный полностью на PHP с использованием предыдущей библиотеки.
- nikolaposa/rate-limit — Рейт-лимитер общего назначения с бекендом на Redis.
- Spartaques/phpkafkacore — Библиотека для работы с Kafka на чистом PHP, альтернатива ext-rdkafka.
Symfony
- Новое в Symfony 5.1 — Среди прочего будет добавлена возможность автовнедрения зависимостей через указание типа публичного свойства.
- symfony/uid — Новый экспериментальный компонент Symfony, для генерации UUID.
- Неделя Symfony #689 (16-22 марта 2020)
Laravel
- Вышел Laravel 7.1.2 с фиксом XSS-уязвимости.
- В связи со спором о товарном знаке в отношении названия «Airlock» пакет Airlock переименован в Sanctum.
- grosv/eloquent-sheets — Позволяет использовать Google-таблицы в качестве источника данных для Eloquent.
- Принцип DRY на примере Laravel.
- Продвинутые советы по Маршрутизации в Laravel.
- Серия видеороликов с объяснением конфигурационных ключей для очередей в Laravel.
Async PHP
- reactphp/socket 1.4.0 — В релизе добавлена поддержка IPv6.
- Продолжение бесед Сергея Жука с Marc Morera (автором DriftPHP) об асинхронном PHP и на этот раз в контексте CQRS.
Материалы для обучения
- PHP reimagined — Прагматичная подборка изменений, которые могли бы сделать PHP лучше.
- Event driven server in PHP — Впечатления от разработки EventSourcing приложения, в котором все агрегаты и проекции загружаются в память и никогда не хранятся на диске.
- О графе потока управления в PHP и использовании ircmaxell/php-cfg.
- Об этикете Composer пакетов и когда стоит изменять мажорную версию семвера, а когда нет.
- Подробная инструкция по созданию окружения на базе Docker.
- Как научить Codeception прыгать к определениям методов хелперов и модулей в PhpStorm — Прислал catanfa.
- Сравнение и бенчмарки JSON и MessagePack.
- NoVerify: PHP-линтер, который работает быстро.
- Обработка миллионов событий в сутки при помощи каскадов очередей.
Аудио/Видео
- Между скобок — Новый подкаст про PHP на русском! В первом эпизоде про перенос легаси приложения с Zend на Symfony без остановки разработки.
- Онлайн-митап про PHP и удалёнку
- Видеозаписи с BeerPHP SPb Meetup
- PHP Internals News #44 — О неизменяемых свойствах с Máté Kocsis.
- PHP Internals News #45 — С Никитой Поповым о дальнейшем развитии PHP.
Спасибо за внимание!
Если вы заметили ошибку или неточность — сообщите, пожалуйста, в личку.
Вопросы и предложения пишите на почту или в твиттер.
Больше новостей и комментариев в Telegram-канале PHP Digest.
Прислать ссылку
Поиск ссылок по всем дайджестам
← Предыдущий выпуск: PHP-Дайджест № 175
Автор: Роман Пронский