PHP Дайджест № 210 (16 – 30 августа 2021)
Фото: Peter Kokot.
Подборка свежих новостей и материалов из мира PHP. Вышла третья бета PHP 8.1, Swiftmailer больше не будет поддерживаться, PHP-FIG обсуждает обновляемые стандарты PER. Для PHP 8.2 предложены два новых RFC: про удаление динамических свойств и перегрузку операторов. Также в выпуске порция полезных инструментов, статьи и видео.
Приятного чтения!
Новости
PHP 8.1 Beta 3
Последняя бета в цикле. Следующим релизом станет RC 1, который ожидается 2 сентября.PHP 8.0.10, PHP 7.4.23, PHP 7.3.30
Секьюрити обновления актуальных веток.Конец Swiftmailer
В ноябре прекращается поддержка популярного пакета для отправки почты Swiftmailer. Вместо него будет развиваться symfony/mailer.Возможности и концепции Symfony Mailer повторяют Swiftmailer, поэтому миграция должна пройти достаточно легко. В Rector есть скрипт миграции и он всего лишь переименовывает классы.
PHP Evolving Recommendations (PERs)
Раньше PHP-FIG выпускали только PSP-стандарты. Проблема в том, что некоторые подобные стандарты требуют постоянной доработки. Например, в случае с код-стайлом сейчас PSR-12 не включает новые возможности из PHP 7.4–8.0.Предлагается ввести новый тип рекомендаций PER, которые можно будет обновлять более оперативно.
4 сентября — PHP fwdays'21 Online
Совсем скоро пройдёт традиционная конференция от fwdays. Программа.Будет бесплатная трансляция всех докладов в день проведения (нужно зарегистрироваться).
Есть дополнительные платные бонусы. Для них можно использовать промокод: HABRDIGEST.
PHP Internals
[RFC] Deprecate dynamic properties
В текущих версиях PHP, если попытаться записать в несуществующее свойство, то оно будет автоматически создано.В современном коде это редко делается намеренно, чаще это опечатка или просто дурной тон.
В этом RFC предлагается задепрекейтить и впоследствии удалить возможность создания динамических (необъявленных) свойств.
class User { public $name; } $user = new User; // Assigns declared property User::$name. $user->name = "foo"; // Oops, a typo: $user->nane = "foo"; // PHP <= 8.1: Молча создает динамическое свойство $user->nane. // PHP 8.2: Вызывает предупреждение, но все равно создает динамическое свойство. // PHP 9.0: Выбрасывает исключение Error.
Это изменение не будет касаться класса
stdClass
и унаследованных от него. Поведение магических__get
/__set
также не затрагиваются этим изменением.$obj = (object) []; // = new stdClass; // No deprecation warning $obj->foo = 1; class myStdClass extends stdClass {} $obj2 = new myStdClass; // No deprecation warning $obj2->bar = 1;
Благодаря этому изменению в PHP 9.0 можно будет уменьшить размер объекта на 8 байт. На одном объекте это, конечно, ничто, но суммарно на больших приложениях будет заметно.
[RFC] User Defined Operator Overloads
В этом RFC автор, Jordan LeDoux, предлагает добавить возможность перегрузки операторов.По сути, для каждого оператора предлагается определить свой магический метод, например
__add()
для`+`
или__equals()
для`==`
.С их помощью можно описывать желаемое поведение для объектов.
$a = new Number(8); $b = new Number(6); $c = new Number(4); // Вместо такого $posRoot = $b->mul(-1)->add($b->pow(2)->sub($a->mul($c)->mul(4))->sqrt())->div($a->mul(2)); // Можно будет сделать вот так $posRoot = ((-1 * $b) + ($b ** 2 - 4 * $a * $c)->sqrt()) / (2 * $a);
В случае если предложение будет принято, то практически можно будет реализовать скалярные объекты.Тем не менее предложение спорное и слишком много нюансов в нем. И несмотря на очень детальный и продуманный RFC, вероятность принятия невысокая.
[RFC] Nullable Intersection types
Предложение сделать пересечения типов nullable в PHP 8.1 не прошло голосование. Многие голосовали против, потому что оно было выдвинуто слишком поздно. Поэтому есть вероятность, что позже будет переголосование в PHP 8.2.
Инструменты
- whsv26/functional — Автор столкнулся с проблемами существующих реализаций коллекций на PHP и написал свой пакет. Подробнее в статье Дженерик коллекции в PHP.
- phpseclib/phpseclib — Реализация SSH, SFTP, RSA / DSA / ELLIPTIC CURVES, AES / CHACHA20 / ETC, X.509 на чистом PHP.
- doekenorg/iterator-functions — Набор функций аналогичных встроенным
array_*
, но принимающих итераторы. На случай если не нравится классика от Никиты Попова nikic/iter. - azjezz/psl — Как могла бы выглядеть стандартная библиотека PHP.
- php-censor/phpdoc-checker — Консольная утилита для валидации PHPDoc-блоков.
- github-php/sponsors — Пакет для работы с API GitHub Sponsors. Можно организовать контроль доступа проверяя является ли пользователь спонсором.
- paglliac/php-dependency-analysis — Инструмент для анализа зависимостей внутри проекта. Более продвинутые штуки можно делать с помощью qossmic/deptrac или phparkitect/arkitect.
- ArtARTs36/GitHandler — Обертка над Git для PHP. Прислал Ukrainsky.
- butschster/CronExpressionGenerator — Генератор cron выражений. Прислал butschster.
- butschster/ray-server — Бесплатный сервер для отладки PHP приложений с помощью spatie/ray. Пост с обзором возможностей и деталями реализации. Прислал butschster.
Symfony
Laravel
Yii
Статьи
Аудио/Видео
Подписывайтесь на Telegram-канал PHP Digest.
Этот дайджест подготовлен совместно с Insolita. Если вам понравился выпуск, поставьте, пожалуйста, ему плюс.
Заметили ошибку или опечатку? Сообщите в личку хабра или телеграм.
Прислать ссылку можно через форму или просто написав мне в телеграм.
Поиск ссылок по всем дайджестам
← Предыдущий выпуск: PHP-Дайджест № 209