Свежая подборка со ссылками на новости и материалы. В выпуске: расписание релиза PHP 8, анализ эргономики объектов в PHP и 5 свежих RFC из PHP Internals, немного полезных инструментов, видео, подкасты и многое другое.
Приятного чтения!
PHP Internals
- Опубликовано Расписание релиза PHP 8 — Первая альфа ожидается 18 июня, а финальный релиз 3 декабря. Подробнее.
- [RFC] Constructor Property Promotion — Ларри Гарфилд опубликовал подробный анализ эргономики объектов в PHP, в котором делает вывод, что лучше всего было бы сфокусировать на 3х RFC: Constructor Promotion, Named parameters, Compound Property Visibility (раздельное указание модификаторов доступа для чтения и записи
{public get, private set}
).
И вот по следам анализа, в данном RFC предлагается разрешить объявлять свойства прямо в конструкторе:
Вместо такогоclass Point { public float $x; public float $y; public float $z; public function __construct( float $x = 0.0, float $y = 0.0, float $z = 0.0 ) { $this->x = $x; $this->y = $y; $this->z = $z; } }
Можно будет писать:
class Point { public function __construct( public float $x = 0.0, public float $y = 0.0, public float $z = 0.0 ) {} }
- [RFC] Allow trailing comma in parameter list — Ну и в дополнение к предыдущему, предлагается разрешить использовать запятую после последнего параметра в определении функции. Для списка аргументов при вызове функции это уже работает начиная с PHP 7.3.
Скрытый текстclass Uri { private function __construct( ?string $scheme, ?string $user, ?string $pass, ?string $host, ?int $port, string $path, ?string $query, ?string $fragment // <-- ARGH! ) { ... } }
- [RFC] Stricter type checks for arithmetic/bitwise operators — Этот RFC предлагает выдавать ошибку TypeError, когда арифметический или побитовый оператор применяется к массиву, ресурсу или объекту.
var_dump([] % [42]); // int(0) // WTF?
- [RFC] Switch expression — Предлагается разрешить использовать
switch
в качестве выражения, а не только как управляющую конструкцию:
$expressionResult = switch ($condition) { 1 => foo(), 2 => bar(), 3, 4, 5 => baz(), };
Также RFC предлагает разрешить перечисление возможных значений в секцияхcase
:case 3, 4, 5: break;
вместоcase 3: case 4: case 5: break;
. - [RFC] Type casting in array destructuring expressions — Предлагается сделать возможным использование приведения типов при деструктурировании массивов:
[(int) $now, (int) $future] = ["2020", "2021"]; // По сути то же, что и [$now, $future] = ["2020", "2021"]; $now = (int) $now; $future = (int) $future;
Николас Грекас в Твиттере приводит примеры возможного использования такой функциональности, а именно имитации именованных параметров:
...[int $i] = ['a' => '123']; function foo(...[int $i]) { } foo(['a' => '234']);
и быстрого объявления типизированных вложенных структур:
$var = (Foo) [ 'a' => 123, 'b' => (Bar) [ 'c' => // ... ], ];
- Отклонены по результатам голосования: Server-Side Request and Response Objects, Userspace operator overloading, Write-Once (readonly) Properties.
Инструменты
- TitasGailius/terminal — Красивая обёртка над symfony/process для запуска внешних команд из PHP.
- rlanvin/php-ip — Библиотека для работы с IPv4/IPv6 на PHP, вдохновлённая ipaddress из Python.
- ramsey/collection — Реализация коллекций вдохновлённая Java.
- clue/graph-composer — Инструмент визуализирует связи между composer-пакетами вашего проекта.
Symfony
- Неделя Symfony #692 (30 марта — 5 апреля 2020)
- Обзор компонента symfony/messenger.
- Временная локализация на Symfony 4 + Twig.
Laravel
- 6 секретов Laravel Eloquent для улучшения кода.
- Сложные формы с помощью Laravel Livewire.
- Всё о валидации в Laravel.
- Blade компоненты в Laravel 7.
- Используем трейты для полиморфных связей в Laravel.
- Небольшие хитрости для тестирования веб-приложений на Laravel с использованием Model Factories.
Yii
Материалы для обучения
- О тестировании без мок-фреймворков.
- О паттерне Circuit Breaker и использовании ackintosh/ganesha.
- Функциональные тесты и ускорение создания схемы БД.
- О проблемах паблик свойств и методов и как их «приватизировать» с помощью rectorphp/rector.
- О разработке с использованием флагов фич (фиче-флагов?).
- Разбор уязвимости в ImpressCMS или почему не стоит доверять $_SERVER['PHP_SELF'].
- SerafimArts/opengl-demo — Демо использования OpenGL (SDL) на чистом PHP через FFI. (!)
- Капча для CodeIgniter 4 (и не только).
- Проблемы использования Doctrine ODM в процессах-демонах.
- Spiral: высокопроизводительный PHP/Go фреймворк.
Аудио/Видео
- Запись большого онлайн-митапа по PHP: про легаси, монолиты, CQRS, GraphQL, редкие утилиты и вредные советы разработчику Васе.
- PHP Internals News: Episode 47: Attributes v2 — С Benjamin Eberlei об аннотациях в PHP и RFC Attributes v2. Радует, что над потенциальной реализацией идёт активная работа.
- PHP Internals News: Episode 46: str_contains() — C Philipp Tanlak о добавленной str_contains() благодаря его RFC.
- Пятиминутка PHP № 76: Как провести собеседование PHP разработчика middle-уровня?
- Между скобок №2: Антон Морев о GraphQL.
Спасибо за внимание!
Если вы заметили ошибку или неточность — сообщите, пожалуйста, в личку.
Вопросы и предложения пишите на почту или в твиттер.
Больше новостей и комментариев в Telegram-канале PHP Digest.
Прислать ссылку
Поиск ссылок по всем дайджестам
< Предыдущий выпуск: PHP-Дайджест № 176
shushu
По поводу Symfony Messenger на SymfonyCasts есть отличный видеоурок по ним.
symfonycasts.com/screencast/messenger (не сочтите за рекламу, я к этому ресурсу никакого отношения не имею.
webdevelopacc
если уж на них ссылки на symfony.com, то куда уж больше рекламы)