Прежде чем перейти к статье, хочу вам представить, экономическую онлайн игру Brave Knights, в которой вы можете играть и зарабатывать. Регистируйтесь, играйте и зарабатывайте!
Фото: Christian Münch.
В эти две недели core команда PHP активно обсуждала предложение по Partial function Application и в качестве альтернативы Никита Попов предложил более простой синтаксис для получения ссылки на любые функции. Также в уже принятые в PHP 8.1 енумы предлагается добавить статические свойства.
Symfony 6 будет требовать PHP 8.0, а вышедшая Doctrine 2.9 поддерживает указание метаданных в атрибутах вместо PHPDoc.
Еще в выпуске классная статья про регекспы и инструкция по использованию Deployer, а также другие полезные статьи, пачка инструментов, немного видео и подкастов.
Приятного чтения!
Если вам понравился дайджест, поставьте, пожалуйста, ему плюс — это очень мотивирует продолжать делать.
Заметили ошибку или опечатку? Сообщите в личку хабра или телеграм.
В эти две недели core команда PHP активно обсуждала предложение по Partial function Application и в качестве альтернативы Никита Попов предложил более простой синтаксис для получения ссылки на любые функции. Также в уже принятые в PHP 8.1 енумы предлагается добавить статические свойства.
Symfony 6 будет требовать PHP 8.0, а вышедшая Doctrine 2.9 поддерживает указание метаданных в атрибутах вместо PHPDoc.
Еще в выпуске классная статья про регекспы и инструкция по использованию Deployer, а также другие полезные статьи, пачка инструментов, немного видео и подкастов.
Приятного чтения!
PHP Internals
[RFC] First-class callable syntax
В качестве альтернативы довольно сложному [RFC] Partial Function Application Никита предлагает более простое решение проблемы получения ссылки на любую функцию или метод.
// Сейчас вот так $fn = Closure::fromCallable('strlen'); $fn = Closure::fromCallable([$this, 'method']); $fn = Closure::fromCallable([Foo::class, 'method']); // Предлагается вот такое $fn = strlen(...); $fn = $this->method(...); $fn = Foo::method(...);
И соответственно, такой синтаксис можно будет применять везде, где ожидаетсяCallable
. Например, вот так:
array_map(Something::toString(?), [1, 2, 3]); array_map(strval(...), [1, 2, 3]); // вместо array_map([Something::class, 'toString'], [1, 2, 3]) array_map('strval', [1, 2, 3]);
[RFC] Disable autovivification on false
Сейчас PHP позволяет инициализировать массив из переменной со значениемnull
илиfalse
. Предлагается дляfalse
все-таки бросатьFatal error
:
3v4l.org/UucOC$a = true; $a[] = 'value'; // Fatal error: Uncaught Error: Cannot use a scalar value as an array $a = null; $a[] = 'value'; // Ok $a = false; $a[] = 'value'; // Сейчас это работает, но предлагается задепрекейтить
[RFC] Allow static properties in enums
В PHP 8.1 будут енумы. Подробный разбор был на стриме PHP-дайджеста и в тексте на php.watch.
В енумах могут быть статические методы и константы, а предлагается добавить еще статические свойства.
Пример использованияenum Environment { case DEV; case STAGE; case PROD; private static Environment $currentEnvironment; /** * Read the current environment from a file on disk, once. * This will affect various parts of the application. */ public static function current(): Environment { if (!isset(self::$currentEnvironment)) { $info = json_decode(file_get_contents(__DIR__ . '/../../config.json'), true); self::$currentEnvironment = match($info['env']) { 'dev' => self::DEV, 'stage' => self::STAGE, 'prod' => self::PROD, }; } return self::$currentEnvironment; } // Other methods can also access self::$currentEnvironment } printf("Current environment is %s\n", Environment::current()->name);
Предложение спорное. Пишите в комментариях, что думаете по этому поводу.
Кстати, в релизе PhpStorm 2021.2 уже будет поддержкаenum
, а пощупать можно будет на этой неделе в выпуске 2021.2 EAP.
[PR] Поддержка HTTP Early Hint support
По умолчанию, PHP поддерживает отправку только одного набора заголовков. Но статус кодыHTTP 1xx
могут потребовать отправки нескольких наборов хедеров. В частности, для использования103
, нужно сначала отправить заголовки Link, и затем, когда весь ответ будет готов, отправить обычные200 OK
.
Сейчас такое можно сделать, но немного криво: заголовки103
отправить, как обычно, черезheader()
, а следующую порцию заголовков — вручную прям черезecho
.
Никита предлагает добавить функцию для того, чтоб можно было отправлять несколько наборов заголовков. В пул-реквесте обсуждение API с участием команды Symfony и одним из авторов спецификаций HTTP.
[RFC] Add IntlDatePatternGenerator
Предложение принято. В PHP 8.1 будет классIntlDatePatternGenerator
для быстрого создания дат в локализированном формате. Подробнее в PHP Internals News #85 с автором RFC.
[RFC] Final class constants
На голосовании.
В Internals обсуждается идея задепрекейтить багтрекер bugs.php.net
Вместо него предлагается использовать issues на GitHub. У идеи есть как плюсы, так и минусы. Но как первый шаг, все баги документации теперь будут Гитхабе. Так что если вы нашли ошибку в мануале PHP, то можно просто создать issue в репозитории php/doc-en или php/doc-ru. Вот пример.
Инструменты
- Doctrine ORM 2.9 — Большое обновление популярной ORM. Под капотом поддержка атрибутов PHP 8, типизированные свойства, и другое.
- Flarum 1.0.0 — Релиз популярного движка для форума на PHP.
- moneyphp/money 4.0 — Пакет для правильной работы с денежными значениями.
- phpast.com — Просмотр дерева абстрактного синтаксиса PHP. Полезно при отладке инструментов на базе nikic/PHP-Parser. Код на гитхабе: ryangjchandler/phpast.com.
- JBZoo/CI-Report-Converter — Всеядный конвертер отчетов для CI. Основное призвание утилиты — совместить самый разный результат линтеров с самыми разными CI (TeamCity, GitHub Actions, etc). Прислал smetdenis.
- veewee/xml — Все для удобной работы с XML в одном пакете.
Symfony
- Как эффективно использовать сервисы с тегами в Symfony.
- Что нового будет в Symfony 5.3.
- В Symfony 6 минимальная версия PHP будет 8.0 — Это позволило удалить очень много проверок и кода, который нужен был для совместимости с более ранними версиями.
Laravel
- Полное руководство по Tinker.
- Использование нескольких пользовательских моделей в Laravel Jetstream.
- Отношения «One of Many».
- Laravel Octane with Swoole — Beyond the Basics — Видео от участника Laravel core команды.
Статьи
- PHP.Watch: Советы по написанию более красивых и простых в понимании регулярных выражений в PHP.
- Deployer на GitHub Actions — Подробное руководство по использованию deployphp/deployer и несколько готовых полезных воркфлоу.
- Как скомпилировать PHP из исходников — Подробная инструкция.
- Rector — The Power of Automated Refactoring — Вышла книга по rectorphp/rector. В тему пост про транспайлинг кода с PHP 8.0 на 7.1.
- Что такое copy-on-write и как это работает в PHP.
- Dependency Injection в мире Software Engineering.
- Принцип подстановки Барбары Лисков (предусловия и постусловия).
- Наследование шаблонов в ванильном PHP за 35 строк кода?
- Чистим пхпшный код с помощью DTO и пакета yzen-dev/plain-to-class.
Также в тему пакет https://github.com/alexpts/php-data-transformer2 для преобразования моделей в dto и dto в модели. Прислал Александр Павлов.
Аудио/Видео
- PHP Internals News #86 — С Никитой Поповым про аксессоры свойств.
- 38+ трюков PhpStorm от Christoph Rumpel.
Сообщество
- Мутационное тестирование: как поможет и чем лучше воспользоваться — Интервью с Максом Рафалко в преддверии PHP Russia.
Подписывайтесь на Telegram-канал PHP Digest.
Если вам понравился дайджест, поставьте, пожалуйста, ему плюс — это очень мотивирует продолжать делать.
Заметили ошибку или опечатку? Сообщите в личку хабра или телеграм.
Прислать ссылку можно через форму или просто написав мне в телеграм.
Поиск ссылок по всем дайджестам
← Предыдущий выпуск: PHP-Дайджест № 203