PHP и Laravel дайджест новостей за май 2025 года

от автора

Всем привет!

Это дайджест новостей от 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() для получения первого и последнего значения массива.

📣 RFC: Clone with v2

В 2022 году Máté Kocsis представил RFC Clone with, который не дошел до стадии голосования.

В этом году Volker Dusch и Tim Düsterhus решили подхватить работу над заброшенной реализацией и представили вторую версию RFC.

📊 RFC: Pipe operator v3

С третьей попытки оператор конвейера попадет в 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 классным. Собрали их тут:

https://php30.ru

А также обсудили их в эфире:

А 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/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *