Свежая подборка со ссылками на новости и материалы. В выпуске: обновления PHP, Codeception 3.0 и другие релизы, короткие лямбды в PHP 7.4 и обзор свежих RFC-предложений из PHP Internals, порция полезных инструментов, и многое другое.
Приятного чтения!
Новости и релизы
- PHP 7.3.5
- PHP 7.2.18
- PHP 7.1.29
- Codeception 3.0 — Улучшенная интерактивная консоль, повторное выполнение шагов, поддержка PHPUnit 8 и другое.
- spiral/roadrunner 1.4.0 — Обновление сервера приложений, балансировщика и менеджера процессов на Go. В релизе безопасная остановка воркеров, поддержка переменных окружения в конфигах, возможность контролировать воркеры в пуле, и другое. Есть новый сайт roadrunner.dev.
- PHP Russia 2019 — 17 мая, Москва, Инфопространство. До последнего повышения цен остается всего несколько дней.
PHP Internals
- [RFC] Arrow Functions 2.0 — Предложение прошло голосование и принято. Теперь в PHP будут короткие анонимные функции с использованием синтаксиса
fn() =>
и автоматическим захватом переменных из внешнего скоупа по значению:$y = 1; $fn = fn($x) => $x + $y;
Пока функции могут иметь только одно выражение строго, результат которого и будет возвращён. Многострочные функции, возможно, будут реализованы позже. Хак с использованием оператора && как в JS не сработает:Скрытый текстНо можно применить хак с использованиемandOperator = ($x) => ($y = 10) && $x + $y; console.log(andOperator(5)); // 15
$andOperator = fn($x) => ($y = 10) && $x + $y; var_dump($andOperator(5)); // bool(true)
end()
:Скрытый текст<?php function last(...$args) { return end($args); } $multipleLines = fn($x) => last( $y = $x * 10, // 10 $z = $y + 15, // 25 $x + $y + $z // 1 + 10 + 25 результат этого выражения возвращается из last() ); var_dump($multipleLines(1)); // int(36)
Или с помощьюarray_slice()
, спасибо Grikdotnet за наводку:
Скрытый текст$multipleLines = fn($x) => array_slice([ $y = $x * 10, $z = $y + 15, $x + $y + $z ], -1)[0]; var_dump($multipleLines(1)); // int(36)
- [RFC] Deprecate PHP Short open tags — В предложении рассматривалась идея убрать возможность использования коротких тегов
<?
, однако оно было встречено бурей возмущений и споров. Поэтому был предложен гораздо более мягкий путь, в котором в ближайших версиях возможность остаётся доступной как есть, и будет бросаться deprecation warning. - [RFC] Spread Operator in Array Expression — Предложение принято практически единогласно. Оператор
...
теперь будет доступен в массивах.Скрытый текстТакже с помощью него можно быстро преобразовать итератор в массив вместо использования$parts = ['apple', 'pear']; $fruits = ['banana', 'orange', ...$parts, 'watermelon']; // ['banana', 'orange', 'apple', 'pear', 'watermelon'];
iterator_to_array
:$array = [...$iter];
- RFC: Allow throwing exceptions from __toString() — Никита продолжает систематически исправлять «грусти PHP» одну за одной. На этот раз речь идёт о возможности бросать исключение в
__toString()
. Ещё одно приятное и совсем не тривиальное улучшение для PHP 7.4, которое избавит от необходимости использовать всякие обходные пути 1, 2. - PHP Internals News #7 — Derick Rethans общается с Зеевом Сураски о JIT в PHP 8 и более ранних попытках реализации.
- PHP Internals News #8 — Беседа с George Banyard, контрибьютором документации PHP, о коротких тегах.
Инструменты
- kalessil/production-dependencies-guard — Пакет предотвращает добавление dev-зависимостей, например, тестовых и отладочных инструментов, в секцию require файла composer.json, а также делает несколько других проверок.
- jakoch/awesome-composer — Подборка ресурсов и инструментов для Composer.
- twirphp/twirp — Порт RPC-фреймворка Twirp от Twitch на PHP. Пост в поддержку.
- EFTEC/BladeOne — Независимая от фреймворка версия Blade в одном файле и без зависимостей.
- fe3dback/str — Объектная обёртка над string с массой методов для манипуляций и поддержкой многобайтовых строк.
Symfony
- saa-nl/zymfony-bundle — Набор компонентов для миграции с Zend Framework 1 to Symfony 4. Название напомнило картинку:
- Неделя Symfony #643 (22-28 апреля 2019)
- Неделя Symfony #644 (29 апреля — 5 мая 2019)
Laravel
- VanOns/laraberg — Порт блочного редактора Gutenberg из WordPress для Laravel.
- aimeos/aimeos-laravel — Ещё одно e-commerce решение на базе Laravel.
- Как устроен Eloquent — Laravel Core Adventures
- Начинаем работать с event sourcing в Laravel — используя spatie/laravel-event-projector.
- Подкаст Тейлора Laravel Snippet #12 — В выпуске о Vue SPAs, Intertia.js, Livewire, коротких лямбдах, PHP RFC.
Yii
- Insolita/yii2-codestat — Считает статистику приложений на Yii 2.
- omnilight/yii2-scheduling — Порт планировщика задач из Laravel для Yii 2.
- К команде Yii присоединился Mehdi Achour
- Обзор Yii3
Async PHP
- Пишем RESTful API с помощью ReactPHP: Базовая HTTP аутентификация, и аутентификация с помощью JWT
- Асинхронный PHP. Зачем?
Материалы для обучения
- Компилятор PHP, также известный как кроличья нора FFI — Интересный пост о типах компиляторов, принципах их устройства, и собственно о реализации ahead-of-time (AOT) компилятора PHP с использованием LLVM и самого PHP.
- Как мы мигрировали 54357 строк кода с Nette на Symfony вдвоём меньше чем за 80 часов.
- Запускаем PHPUnit тесты из PhpStorm
- Серия статей о PSR-14 — дополнена выпусками об использовании в отложенных и асинхронных окружениях.
- azdanov/php-interview-exercises — Полезный репозиторий чтоб попрактиковаться в решении типичных алгоритмических задач, которые могут давать на собеседованиях.
- 5 способов деплоя PHP-кода в условиях хайлоада
- Статистика и мониторинг PHP скриптов в реальном времени. ClickHouse и Grafana идут на помощь к Pinba.
- Ломаем паттерн проектирования Singleton в PHP
- Стрим по обновлению spatie/period — подглядывать в чужой монитор довольно познавательно.
- SDCast #103: в гостях Никита Попов — Интервью с Никитой на русском о разных аспектах PHP и его разработки.
Спасибо за внимание!
Если вы заметили ошибку или неточность — сообщите, пожалуйста, в личку.
Вопросы и предложения пишите на почту или в твиттер.
Больше новостей и комментариев в Telegram-канале PHP Digest.
Прислать ссылку
Поиск ссылок по всем дайджестам
< Предыдущий выпуск: PHP-Дайджест № 154
Комментарии (11)
galliard
06.05.2019 17:22Из всех вариантов коротких лямбд выбрали самый кривой…
Ну, раз так — то было бы неплохо использовать новое ключевое слово для объявления любых функций, а не только коротких лямбд.
fn helloWorder() => echo 'Hello world';
pronskiy Автор
07.05.2019 09:36В документе есть целая секция с обоснованием выбора синтаксиса wiki.php.net/rfc/arrow_functions_v2#syntax
а также секция про возможные улучшения в будущем wiki.php.net/rfc/arrow_functions_v2#allow_arrow_notation_for_real_functionsSerafimArts
07.05.2019 11:36Вообще, можно было сделать просто fn алиасом на function, получилось бы более консистентно, имхо:
class X { public fn a() { ... } public function b() { ... } public fn c() => ...; public function d() => ...; } $a = function ($x) use ($z) { ... }; $b = fn($x) use ($z) { ... }; $c = function ($x) => ...; $d = fn($x) => ...;
А отличия были бы только в "=>" vs "{}", в первом случае только одно выражение + захват контекста, а во втором много выражений + контекст через use.galliard
07.05.2019 22:49А заодно и use отменить, раз захват контекста без него уже реализовали.
t_kanstantsin
08.05.2019 13:56Захват контекста реализован не так, как use. В use можно использовать ссылку и менять исходную переменную. В fn => — по значению.
Хотя в rfc описан вариант (я так понимаю, на будущие релизы):
$fn = fn() use(&) { // ... };
SerafimArts
07.05.2019 12:10+1Компилятор PHP, также известный как кроличья нора FFI — Интересный пост о типах компиляторов, принципах их устройства, и собственно о реализации ahead-of-time (AOT) компилятора PHP с использованием LLVM и самого PHP.
Это самое безумное и охренительное, что я когда-либо видел! А FFI биндинги под llvm с примерами использования вообще бесподобны.
Grikdotnet
07.05.2019 15:36+1$multipleLines = fn($x) => last(
Зачем объявлять функцию last() и временную переменную для решения проблемы со ссылкой в end()?
Смысл однострочника — в отсутствии деклараций:
$x = 1; echo array_slice([ $y = $x * 10, $z = $y + 15, $x + $y + $z ],-1)[0];
Gemorroj
О, первый раз услышал как Никита Попов по русски говорит)