PHP-Дайджест № 177 (23 марта – 6 апреля 2020)
Свежая подборка со ссылками на новости и материалы. В выпуске: расписание релиза 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
в качестве выражения, а не только как управляющую конструкцию:
Также RFC предлагает разрешить перечисление возможных значений в секциях$expressionResult = switch ($condition) { 1 => foo(), 2 => bar(), 3, 4, 5 => baz(), };
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
Laravel
Yii
Материалы для обучения
Аудио/Видео
Спасибо за внимание!
Если вы заметили ошибку или неточность — сообщите, пожалуйста, в личку.
Вопросы и предложения пишите на почту или в твиттер.
Больше новостей и комментариев в Telegram-канале PHP Digest.
Прислать ссылку
Поиск ссылок по всем дайджестам
← Предыдущий выпуск: PHP-Дайджест № 176