Свежая подборка со ссылками на новости и материалы. В выпуске: PHP 8 beta 3, принят новый синтаксис атрибутов в PHP 8, Zephir всё, целая пачка полезных инструментов, статьи, видео, подкасты.
Приятного чтения!
Новости и релизы
- PHP 8 beta 3 — Последняя бета в цикле. Следующим релизом станет RC 1, который ожидается 17 сентября.
- PHP 7.4.10, PHP 7.3.22
- Будущее Zephir и Phalcon — Один из контрибьюторов языка Zephir и PHP-фреймворка Phalcon ушёл из проекта, поэтому активная разработка Zephir приостановлена, а Phalcon 5 планируется переписать на чистый PHP.
- В WordPress сообществе обсуждается план по поддержке версий PHP. Судя по ответам лидера проекта Matt Mullenweg, PHP 5.6 будет поддерживаться еще долго. По официальной статистике PHP ≤5.6 используется на 21.6% установок WP.
PHP Internals
- [RFC] Shorter Attribute Syntax Change — Наконец-то закончилась эпопея с синтаксисом для атрибутов. На переголосовании принят вариант
#[Attribute]
.#[ ORMEntity, ORMTable("user") ] class User { #[ORMId, ORMColumn("integer"), ORMGeneratedValue] private $id; #[ORMColumn("string", ORMColumn::UNIQUE)] #[AssertEmail(["message" => "The email '{{ value }}' is not a valid email."])] private $email; }
Кстати, предыдущий синтаксис с
@@Attr
не поддерживал группировку атрибутов и поэтому такая возможность была убрана из PR. Но поскольку у#[ ]
есть маркер конца, то группировку он поддерживает и она была возвращена.// Можно и так #[ORMEntity] #[ORMTable("user")] // и так #[ ORMEntity, ORMTable("user") ]
Подробнее об атрибутах было в посте.
- [RFC] any() and all() on iterables — Предлагается добавить две новых функции в стандартную библиотеку:
any(iterable $input, ?callable $callback = null): bool
— запустит колбек на каждом элементе и остановится, на первом, который вернетtrue
.
all(...)
— вернетtrue
только, если колбек вернетtrue
для каждого элемента.Пример использования:
// Было $satisifes_predicate = false; foreach ($item_list as $item) { if (API::satisfiesCondition($item)) { $satisfies_predicate = true; break; } } if (!$satisfies_predicate) { throw new APIException("No matches found"); } // Стало if (!any($item_list, fn($item) => API::satisfiesCondition($item))) { throw new APIException("No matches found"); }
Инструменты
- Pest 0.3 — Обертка над PHPUnit, которая позволяет писать тесты в более простом виде. Также готов плагин для PhpStorm Pest IntelliJ.
- Codeception/Verify 2.0 — Ассершены для PHPUnit и Codeception с fluent-интерфейсом.
- ramsey/composer-repl — Добавляет команду
composer repl
для запуска bobthecow/psysh. - brick/money — Библиотека для работы с денежными данными. Работает, даже если не уставлены GMP или BCMath. Сравнение с moneyphp/money.
- bassim/super-expressive-php — Библиотека позволяет описывать регулярные выражения почти-естественным языком через текучий интерфейс. Альтернатива VerbalExpressions/PHPVerbalExpressions.
- phpsci/phpsci-carray — Расширение PHP для научных вычислений. Основано на NumPy.
- github.com/phpwebclient — Декораторы и хелперы для PSR-18 совместимых HTTP-клиентов.
- hamlet-framework/type — Библиотека для спецификации типов. Может быть использована везде, где нужна спецификация типов, включая cast, assert, instanceof и т. п.
Symfony
- Книга «Symfony 5: Быстрый старт» доступна онлайн на русском.
- Неделя Symfony #714 (31 августа — 6 сентября 2020)
Laravel
- laravel-orion/laravel-orion — Пакет для автоматического создания REST API по Eloquent-моделям и их отношениям. Прислал @alexzarbn.
- Statamic 3 — CMS на Laravel.
- Типичные ошибки в безопасности в Laravel-приложениях.
- Legacy и Laravel: Переписываем устаревшее приложение на современный фреймворк.
- Laravel 8 — Что нового? — Новая версия фреймворка выходит 8 сентября.
- Laravel–Дайджест (24 августа – 6 сентября 2020)
- Laravel Worldwide Meetup #2: Neo Ighodaro and Michael Dyrynda
Yii
- yiisoft/auth — Свежий пакет из семейства Yii 3 предоставляет различные методы аутентификации, набор абстракций для реализации в приложении, и PSR-15 middleware для аутентификации.
- yiisoft/strings — Хелперы для работы со строками.
Async PHP
Материалы для обучения
- Архитектура PHP-приложений вдохновленная «чистой архитекторой» — (Чтобы обойти пейвол медиума, достаточно открыть ссылку в инкогнито окне).
- Диалекты в коде: Часть 1 — О том, как разные люди могут использовать один и тот же язык программирования совершенно по-разному.
- Как работает unserialize() в PHP — и почему она приводит к уязвимостям.
- Подключаем статический анализ (psalm) в проекте.
- Ускоряем PHP при помощи FFI.
- Настраиваем Xdebug + Docker + PhpStorm, а также немного о продвинутых техниках отладки.
- Anna Filina — Полезный тред от Anna Filina о рефакторинге легаси приложений на PHP:
- Xdebug через Windows Subsystem For Linux 2 (WSL2).
- Модернизация старого PHP-приложения.
- Мёртвый код: найти и обезвредить.
- Перечисления в PHP.
- Ты решил написать свой фреймворк. Стоило оно того? — Расшифровка выпуска подкаста Между скобок с Александром Лисаченко.
- Как Lingualeo переехал на PostgreSQL с 23 млн юзеров — Эпичный пост о переносе логики из PHP в хранимки. И годный ответ: Вред хранимых процедур.
- 20_20 — год, в котором подчеркивание в числовых литералах победило — история разделителей в числовых литералах.
Аудио/Видео
- Доклад Tobias Nyholm про async-aws/aws асинхронный клиент для сервисов AWS.
- ХудоБедно на тему работы в IT с Александром Макаровым, Сергей Жуком и Антоном Моревым.
- PHP Internals News #67 — Дерик Xdebug общается сам с собой на тему нового выражения
match
. Подробнее об историиmatch
в PHP в посте.
Спасибо за внимание!
Если вы заметили ошибку или неточность — сообщите, пожалуйста, в личку.
Вопросы и предложения пишите на почту или в твиттер.
Больше новостей и комментариев в Telegram-канале PHP Digest.
Прислать ссылку
Поиск ссылок по всем дайджестам
← Предыдущий выпуск: PHP-Дайджест № 186
Автор: Роман Пронский