Всем привет!
Это дайджест новостей от CutCode. Давайте посмотрим, что произошло за прошедший месяц в мире PHP и Laravel.
Новости PHP
Релизы PHP 8.3.21 и PHP 8.4.7
Выпуски с исправлением ошибок вышли по расписанию.
Random Beer
В опросе PHP-сообщества 2024 многие отмечали, что нам не хватает нетворкинга, развлечений и неформальных мероприятий. И мне есть что вам предложить – состоялось уже три встречи в онлайн-баре «PHPерделка».
Присоединяйтесь, будет интересно и познавательно 🙂
Пых.конф
19 сентября в Москве в Центре Международной Торговли пройдёт новая PHP-конференция – Пых.конф’25!
400 участников • 4 зала • 28 докладов Вот сайт конференции, где можно приобрести билет — https://conf.phpyh.ru/.
Там же можно записаться в качестве спикера и предложить доклад! Заявку можно подать до 1 июля.
FrankenPHP теперь официально поддерживается PHP Foundation
Репозиторий FrankenPHP в ближайшее время будет перенесен в организацию PHP на GitHub.
Руководство проектом остается неизменным, и текущая команда мейнтейнеров (Кевин Данглас, Роберт Ландерс, Александр Штехер) продолжит отвечать за выпуски, а также за code review. Они будут активно сотрудничать с командой PHP Foundation, отвечающей за разработку языка.
В будущем сервер может войти в состав PHP по аналогии с PHP-FPM, если такой RFC пройдёт голосование.
Программа раннего доступа PhpStorm 2025.2
С помощью программы раннего доступа вы можете попробовать новые возможности PhpStorm и оставить свой отзыв команде PhpStorm. Сборки по программе раннего доступа бесплатны для использования и не требуют лицензии.
Новости ядра PHP
Большинство новостей ядра PHP подробно освещаются в серии PHP Core Roundup от PHP Foundation, мы лишь быстро по ним пробежимся:
✅ RFC: array_first() and array_last()
В PHP 7.3 появились функции array_key_first() и array_key_last() для получения первого и последнего ключа массива, но до сих пор нет функций для получения первого и последнего значения массива.
Сергей Мухин в своем телеграм-канале вспомнил, что в PHP 7.3 функции для получения значений так же были в RFC, но они не прошли голосование в отличие от функций для получения ключей массивов.
И вот, спустя 7 лет, в PHP 8.5 появятся функции array_first() и array_last() для получения первого и последнего значения массива.
В 2022 году Máté Kocsis представил RFC Clone with, который не дошел до стадии голосования.
В этом году Volker Dusch и Tim Düsterhus решили подхватить работу над заброшенной реализацией и представили вторую версию RFC.
С третьей попытки оператор конвейера попадет в PHP. Первая попытка была предпринята Sara Golemon и Marcelo Camargo в далеком 2016 году, но RFC так и не дошел до голосования.
Спустя 4 года в 2020 Larry Garfield предпринял вторую попытку, но несмотря на то, что RFC нашел отклик у сообщества на сайте RFC Vote, на голосовании большинство отдало свой голос против инициативы, потому что реализация была шаткая и близился фича-фриз PHP 8.1.
Спустя еще почти 5 лет Larry Garfield снова начал дискуссию об операторе конвейера, улучшив реализацию, которая преодолела порог в ⅔ голосов и была принята.
PHP 30 лет
В этом году PHP исполнилось 30 лет, за это время проект вырос из набора скриптов для домашних страниц до языка программирования на котором работает 80% сайтов.
Кажется, что современный PHP уже перерос Personal Home Page Tools и пора подумать над новым значением акронима. Вы прислали варианты акронима, а также истории, как вы впервые столкнулись с PHP, как язык повлиял на вашу жизнь или почему вы считаете PHP классным. Собрали их тут:
А также обсудили их в эфире:
А 5 разработчиков стали счастливее благодаря PHP-слоникам! 🐘
Обновления Laravel
[12.11] Typed getters for Arr helper
https://github.com/laravel/framework/pull/55567
Anthony Tibbs добавил типизированные методы-геттеры в хелпер Arr (Arr::string(), Arr::integer(), Arr::float(), Arr::boolean(), Arr::array()).Каждый метод попытается вернуть тип и выдаст исключение, если данные не соответствуют типам:
use Illuminate\Support\Arr; $array = ['name' => 'Joe', 'languages' => ['PHP', 'Ruby']]; $value = Arr::string($array, 'name'); // Joe $value = Arr::string($array, 'languages'); // throws InvalidArgumentException
[12.11] Add payload creation and original delay info to job payload
https://github.com/laravel/framework/pull/55529
Следующий PR от Taylor Otwell. Видимо он готовится к релизу Laravel Nightwatch, прокачал payload в jobs — добавились delay и createdAt.
$job->payload(); /* Возвращает: ['delay' => 5, 'createdAt' => 1745965273] */
[12.12] Make Blueprint Resolver Statically
https://github.com/laravel/framework/pull/55607
В Laravel обнаружили баг: Schema::blueprintResolver() не работал глобально из-за отсутствия static у резолвера. Изначально проблему попытались исправить, но после обсуждения Taylor Otwell решил откатить изменения, чтобы избежать побочных эффектов.
Временное решение:
$this->callAfterResolving('db.schema', fn ($schema) => $schema->blueprintResolver(/* ... */));
Обновление появится в следующих версиях Laravel.
[12.13] Allow naming queued closures
https://github.com/laravel/framework/pull/55634
Will Rowe добавил возможность назначать имена замыканиям (Closure) при постановке в очередь. Это упрощает идентификацию и управление задачами в очередях и системах мониторинга.
dispatch(function () { // ... })->name('custom_name');
[12.13] Add support for callback evaluation in containsOneItem method
https://github.com/laravel/framework/pull/55622
Теперь метод containsOneItem() коллекций поддерживает передачу замыкания (Closure), что позволяет использовать собственную логику для проверки условий. Метод вернет true, если ровно один элемент коллекции удовлетворяет условию.
$collection = collect([1, 2, 3]); $collection->containsOneItem(fn($item) => $item === 2); // true $collection->containsOneItem(fn($item) => $item > 1); // false (2 и 3 соответствуют условию)
[12.14] Revert Make Blueprint Resolver Statically
https://github.com/laravel/framework/pull/55690
Taylor Otwell откатил изменения по Blueprint, которые были внесены релизом 12.12. После выхода версии 12.13 обнаружился критический баг.
[12.14] Introduce Arr::from()
https://github.com/laravel/framework/pull/55715
Helper по работе с массивами, новый метод Arr::from() позволяет легко преобразовывать различные типы данных в массивы:
use Illuminate\Support\Arr; // Примеры использования: Arr::from(collect(['name' => 'Laravel'])); // ['name' => 'Laravel'] Arr::from($jsonable); // Декодирует данные объекта Jsonable в массив Arr::from($arrayable); // Возвращает массив через метод объекта toArray()
[12.15] Add locale-aware number parsing methods to Number class
https://github.com/laravel/framework/pull/55725
Mbungu Ngoma добавил три метода в класс Number для парсинга локализованных числовых строк в числовые значения. Методы используют класс NumberFormatter для разбора и определения формата:
use Illuminate\Support\Number; // Базовые методы Number::parse($string); // Автоматическое определение типа Number::parseInt($string); // Строго целое число Number::parseFloat($string); // Строго число с плавающей точкой // С указанием локали Number::parseFloat(string: $string, locale: 'de'); // Расширенный вариант с указанием типа Number::parse( string: $string, type: NumberFormatter::TYPE_INT64, locale: 'de', );
[12.15] Add a default option when retrieving an enum from data
https://github.com/laravel/framework/pull/55735
Теперь метод enum() в трейте InteractsWithData поддерживает значение по умолчанию, его добавили третьим параметром.
Было: $chartType = request()->enum('chart_type', ChartTypeEnum::class) ?: ChartTypeEnum::Bar; Стало: $chartType = request()->enum('chart_type', ChartTypeEnum::class, ChartTypeEnum::Bar);
[12.15] Add hash string helper
https://github.com/laravel/framework/pull/55767
В хелперы по работе со строками, добавили метод hash() который позволяет хешировать на основе дефолтного алгоритма.
$appId = str('secret-unique-key') ->hash('xxh3') // Простое хеширование ->take(10) // Берем первые 10 символов ->prepend('app-'); // Добавляем префикс // Результат: app-0fb8aac18c //Как было раньше (до Laravel 12.15): $appId = str('secret-unique-key') ->pipe(fn(Stringable $str) => hash('xxh3', (string) $str)) // Громоздкий вариант ->take(10) ->prepend('app-');
[12.15] feat: Add current_page_url to Paginator
https://github.com/laravel/framework/pull/55789
В PR изменили структуру Paginator — добавилась ссылка на текущую страницу. Интересно, что в комментариях Taylor Otwell уже намекнули на возможные проблемы с этим изменением — пока он не отреагировал, но не исключено, что через пару релизов сделают revert.
class ApiResourceCollection extends AnonymousResourceCollection { public function paginationInformation(Request $request, array $paginated, array $default): array { return [ 'links' => [ 'self' => $paginated['current_page_url'], 'next' => $paginated['next_page_url'] ?? null, ], ]; } }
Видео версия дайджеста:
ссылка на оригинал статьи https://habr.com/ru/articles/921134/
Добавить комментарий