Свежая подборка со ссылками на новости и материалы. В выпуске: PHP 8 Beta 1, снова о синтаксисе атрибутов в PHP 8: #[Attr]
vs @[Attr]
, предложение по синтаксису для BigInt, обзоры PHP 8 и много других видео, инструменты, стримы, подкасты.
Приятного чтения!
Новости и релизы
- PHP 8.0.0 Beta 1 — С первым бета-релизом заканчивается фаза активной разработки, а значит список новых возможностей и изменений в ветке 8.0 можно считать финальным. (За исключением синтаксиса атрибутов). Следующая бета ожидается 20 августа.
- PHP 7.4.9, 7.3.21, 7.2.33 — Секьюрити релизы актуальных веток с исправлением уязвимости в phar.
- WordPress 5.5 “Eckstine” — Наконец-то добавлено автообновлением тем и плагинов, что поможет сделать установки CMS безопаснее.
PHP Internals
- [RFC] Shorter Attribute Syntax Change — История с синтаксисом атрибутов в PHP 8 продолжается. О финальном голосовании было в канале, но позже оно было приостановлено из-за того, что не был соблюден регламент по 2х-недельному обсуждению.
Tycon Andre привел примеры, не очень удачного поведения варианта
#[Attr]
в PHP 7. C другой стороны, какая разница, если остальные варианты просто отвалятся с ошибкой парсинга?И сравнение синтаксисов
@@Attr
,#[Attr]
,<<Attr>>
и@[Attr]
:Скрытый текст@@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; } #[ 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; } @[ 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; } << 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; } @: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; }
- [RFC] Named Parameters explicit opt in — Документ был переделан и теперь вместо переименования параметров предлагает лишь явно указывать, что данный параметр именованный.
// Именованный параметр включен явно function callBar(Foo $:parameterName) { $internalName->bar(); } $x = new Foo(); callBar(parameterName: $x); // Параметр не именованный function callBar($externalName) { $externalName->bar(); } $x = new Foo(); callBar(externalName: $x); // Error: cannot call function callBar() using parameter $externalName by name.
Поскольку PHP 8 уже заморожен для новых фич, то данное предложение возможно только в 8.1, да и то маловероятно.
- [Proposal] Bigint shorthand (123n) for GMP objects — Интересное предложение пока без официального RFC.
Предлагается реализовать в PHP синтаксис для больших чисел аналогичный JavaScript с добавлением в конце суффикса «n»:
$theBiggestInt = 9007199254740991n
При этом под капотом будет использоваться GMP. А поскольку для объектов GMP уже перегружены арифметические операторы, а также битовые и сравнения, то работа с такими числами будет прозрачной.
- В рамках дискуссии на тему улучшения интерактивного шелла PHP (
php -a
), предложен PR, который позволит задавать колбэк отрабатывающий на вывод из интерактивного шелла. Или пока можно использовать bobthecow/psysh. - [RFC] PHP Namespace Policy — Отклонен.
Инструменты
- PHPUnit 9.3 — C поддержкой PHP 8 и Xdebug 3.
- sebastianbergmann/cli-parser — Микропакет для парсинга аргументов командной строки, выделенный из PHPUnit.
- coduo/php-matcher — Валидация данных по паттернам для тех, кто не хочет в регекспы.
- phpfn/phpfn — Функциональные примитивы от SerafimArts.
- hidehalo/nanoid-php — PHP-реализация Nanoid — безопасного URL-совместимого генератора уникальных идентификаторов.
- woohoolabs/zen — Простой PSR-11-совместимый контейнер с генератором файла предзагрузки.
- loophp/collection — Легковесные коллекции.
Symfony
- mrsuh/json-validation-bundle — Бандл для валидации JSON запроса/ответа по json-schema.org.
- Деплоим Symfony-приложение на AWS Lambda
- SSR: рендеринг ReactJS приложения на бекэнде используя PHP.
Laravel
- Очереди Laravel: Запуск одной и той же джобы несколько раз.
- Не используйте защиту от массового присваивания в ваших моделях Laravel.
- Better Laravel Way — Несколько видео по фреймворку на разные темы.
- Laravel-Дайджест (10–16 августа 2020)
Материалы для обучения
- Тестирование микросервисов на PHP с помощью Codeception.
- Как работают статические анализаторы PHP-кода.
- Антипаттерны в легаси приложениях на PHP.
- Method fossilisation — О проблемах переопределения наследуемых методов.
- PHP-пакеты как зависимости уровня системы.
- KPHPStorm — Около 7 лет назад ребятки и ВКонтакте выложили код своего транслятора KPHP. C тех пор новостей о нем особо не было.
Представление о том, как выглядит KPHP сейчас можно сделать, посмотрев на плагин для PhpStorm, который опубликовали разработчики.
Код плагина открыт github.com/unserialize/kphpstorm.
- Дружественные классы в PHP — Когда-то был RFC на эту тему, но он не прошел голосование.
- Как создаются Highload проекты на PHP: расшифровка.
- PHP 8: код «До» и «После» (сравнение с PHP 7.4)
- Как я html-парсер на php писал, и что из этого вышло. Заключительная часть
- Запускаем php 8 с JIT через Docker за 5 минут
Аудио/Видео
- PHP 8: Process & fixing insanity — Обзор PHP 8 от одного из core-контрибьюторов George Peter Banyard. Еще раньше уже был подобный доклад от Никиты Попова, а также от от William Pinaud.
- Type Juggling Magic: Why PHP thinks 0 and «password» are the same — Забавное видео о том, как приведение типов в PHP может привести к проблемам безопасности.
- Видеозаписи докладов Dutch PHP Conf 2020
- Стрим «Примеры проектов на PHP и GO» с разбором пары проектов на PHP и Go и обсуждением типичных проблем.
- Пятиминутка PHP #82: О переходе на
declare(strict_types=1)
. - Пятиминутка PHP #83: Объекты передаются по ссылке или нет?
- Подкаст Voices of the ElePHPant: — Интервью с релиз-менеджерами PHP 8 Sara Golemon и Garbriel Caruso — все про предстоящий релиз.
- Подкаст PHP Internals News #66 — С Никитой Поповым про использование одного токена для всего неймспейса в PHP 8 и парсинге PHP в целом.
- Подкаст PHP Internals News #65 — С Dan Ackroyd про новый оператор
?->
в PHP 8.
Занимательное
- www.elephpant.com — Оригинальных слоников синего и розового цвета можно будет заказать, написав автору их дизайна Vincent Pontier.
Серые и черные также есть в магазине Symfony shop.symfony.com — теперь с доставкой по всему миру.
Спасибо за внимание!
Если вы заметили ошибку или неточность — сообщите, пожалуйста, в личку.
Вопросы и предложения пишите на почту или в твиттер.
Больше новостей и комментариев в Telegram-канале PHP Digest.
Прислать ссылку
Поиск ссылок по всем дайджестам
← Предыдущий выпуск: PHP-Дайджест № 185
Автор: Роман Пронский