PHP и Laravel дайджест новостей за январь 2024 года

PHP и Laravel дайджест новостей за январь 2024 года

Всем привет! Краткий обзор новостей из мира PHP иLaravel за январь 2024 года от CutCode.

PHP Дайджест

Вышли PHP 8.2.15 и PHP 8.3.2

🐛 Выпуски с исправлениями ошибок вышли по расписанию.

The PHP Foundation Team Update 2024

В этом году к PHP Foundation присоединятся еще четыре разработчика для дальнейшего развития PHP: David Carlier, James Titcumb, Saki Takamachi и Shivam Mathur.

Рейтинг TIOBE

В рейтинге TIOBE PHP за год поднялся на 3 строчки и занял 7 место, уступив Python, C, C++, Java, C# и JavaScript.

Большинство новостей ядра PHP подробно освещаются в серии PHP Core Roundup от PHP Foundation, мы лишь быстро по ним пробежимся:

📣RFC: Opt-in DOM spec-compliance

Модуль DOM изначально соответствовал спецификацииDOM Core Level 3, но не может поддерживать «Живую спецификацию» из-за множества ошибок.

Niels Dossche предлагает за счетHTML 5 RFC, который уже одобрен для PHP 8.4, добавить новую реализацию DOM, поддерживающую «Живую спецификацию», сохранив старую для обратной совместимости.

📣Dedicated StreamBucket class

Сейчас нет отдельного класса для работы с бакетами потока и используется stdClass.

Máté Kocsis предлагает добавить новый окончательный класс StreamBucket для облегчения статического анализа и улучшения обратной связи.

📣RFC: Multibyte for ucfirst, lcfirst functions, mb_ucfirst mb_lcfirst

Yuya Hamada предлагает добавить многобайтовую поддержку для функций ucfirst и lcfirst; по аналогии, в PHP 8.4 уже будет доступна многобайтовая поддержка для функций trim, ltrim и rtrim.

📣RFC: Raising zero to the power of negative number

Сейчас возведение в отрицательную степень нуля возвращает float(INF).

Jorg Sowa предлагает PHP 8.4 выдавать предупреждение об устаревании, а начиная с PHP 9.0 – выбрасывать исключение.

📣RFC: Deprecate implicitly nullable parameter types

Сейчас использование null в качестве значения по умолчанию для параметра функции, явно не допускающего null, разрешено и не приводит к ошибке.

Máté Kocsis и Gina Peter Banyard предложили объявить такое поведение устаревшим и предлагать пользователю явно указать использование null.

RFC: Improve callbacks in ext/dom and ext/xsl

Методы XSLTProcessor::registerPHPFunctions() и DOMXPath::registerPhpFunctions() смогут использовать тип callable в PHP 8.4.

RFC: Resource to object conversion

RFC был принят единогласно.

Вторичное голосование определило, что ресурсы основного потока, вспомогательные ресурсы потока и ресурс процесса будут преобразованы в PHP 9.0, а остальные ресурсы будут преобразованы в PHP 8.4 или другой минорной версии.

📊RFC: Promote the PHP Foundation

Это нетехнический RFC, возникший из PR дляphp/web-php для продвижения PHP Foundation на сайте php.net.

📊RFC: Final by default anonymous classes

Daniil Gentili предлагает сделать все анонимные классы окончательными по умолчанию и предоставить новое ключевое слово open, чтобы при необходимости сделать их неокончательными. Это похоже на new open class {} в Kotlin.

📊RFC: Policy Repository

RFC был принят единогласно, политики будут храниться в репозиторииphp/policies.

📊RFC: RFC1867 for non-POST HTTP verbs

Ilija Tovilo предлагает добавить новую функцию request_parse_body(), чтобы вывести существующую функциональность на пользовательский уровень и использовать ее для других HTTP-методов, например, PUT и PATCH.

🎉Новый PECL появится в 2024 году

PHP Foundation собирается пересмотреть способ установки модулей в PHP.
Сейчас модули распространяются с помощью устаревшего сайта pecl.php.net и инструмента pecl. Цель состоит в том, чтобы предоставить современную альтернативу, которая будет проще в использовании как для пользователей, так и для разработчиков модулей.

Laravel дайджест

Обновления Laravel

10.39. Dynamic Max Tries on Queued Jobs

https://github.com/laravel/framework/pull/49473

Первый PR обновления 10.39 затрагивает джобы и добавляет новый метод Tries для динамического объявления количества попыток. Раньше было только свойство, теперь есть метод и появилась возможность более универсально определить поведение.

10.39. Add 'Roundrobin' Symfony mailer transport driver

https://github.com/laravel/framework/pull/49435

В раздел по отправке email уведомлений добавили драйвер Roundrobin. Информацию по порядку работы добавлена в документацию Laravel.

10.40. Add session except method

https://github.com/laravel/framework/pull/49520

В рамках сессий появился новый метод except. С его помощью можно получить все элементы сессии за исключением тех, которые мы укажем.

10.40. Add Number::clamp

https://github.com/laravel/framework/pull/49512

Этот PR затрагивает класс Number. Как я вам говорил ранее, когда подробно освещал этот класс в ролике на YouTube, последующие релизы laravel будут добавлять всё больше сахара в этот класс. Так и происходит. Появился новый метод clamp. “Зажимаем” число в диапазоне от минимума до максимума:

public static function clamp (number, min, max);
public static function clamp (53, 0, 1000) // =>53

public static function clamp (10, 20, 30) // =>20

10.40. Make the Schema Builder macroable

https://github.com/laravel/framework/pull/49547

В Schema Builder появился Trait macroable. Всё чаще он появляется в различных сущностях и теперь Schema Builder не исключение. Можем где-нибудь в провайдере добавлять свои методы через macro и позже пользоваться им в миграциях.

10.40. Add assertViewEmpty to TestView

https://github.com/laravel/framework/pull/49558

Следующий Pull Request добавляет метод в процесс тестирования assertViewEmpty, чтобы проверить что у нас View в Responce срендерило пустой результат.

10.40. Update tailwind.blade.php for dark mode

https://github.com/laravel/framework/pull/49515

PR, который добавляет тёмный режим в тему для пагинатора на основе TailwindCSS.

10.40. Allow Vite asset path customization

https://github.com/laravel/framework/pull/49437

Интересный PR. Раньше, чтобы получить итоговый путь до ассетов у нас был хелпер Asset. Но если у нас в системе зарегистрированы Tenants, то необходимо получить динамический итоговый url до ассета, и с этим возникали сложности. Теперь же в рамках фасада Vite появился метод createAssetPathUsing и мы можем динамически задавать url на основе той логики, которая нам необходима.

10.40. Add assertCount test helper

https://github.com/laravel/framework/pull/49609

PR по тестам - assertCount. Используется чтобы проверить какое количество заданий (Jobs) добавлено в очередь.

10.40. Add APA style title helper

https://github.com/laravel/framework/pull/49572

PR затрагивает класс по работе со строками и добавляет новый метод APA, который позволяет переформатировать строку c заголовком на основе APА стиля. Есть сайт https://apastyle.apa.org/style-grammar-guidelines/capitalization/title-case,

на котором подробно рассказано что это за стиль такой, как он выглядит, где используется. Если вкратце - важные слова приводятся в upper case, остальные остаются в нижнем регистре.

10.41. Add a threshold parameter to the Number::spell helper

https://github.com/laravel/framework/pull/49610

Опять класс Number и метод spell немного модифицирован. Теперь появилась возможность задать порог threshold parameter, чтобы приводить число к тому, как мы его произносим только тогда когда оно в этом диапазоне.

Напомню, метод spell приводит числа к строке, к тому как мы это число произносим. Например 8 будет eight.

Теперь появились два новых параметра, а именно After и Until. Рассмотрим примеры:

$this->assertSame('9', Number::spell(9, after: 10));
$this->assertSame('eleven', Number::spell(11, after: 10));

Глядя на тесты, мы видим, что если мы передаем “9”, но при этом указываем в параметре”after: 10”, то не получим “nine” строку, а “9”. А если укажем 11, с параметром ”after: 10”, то уже результат будет строка - “eleven”. То же самое с параметром Until, только наоборот.

10.41. Allow job chains to be conditionally dispatched

https://github.com/laravel/framework/pull/49624

Новые методы dispatchIf и dispatchUnless для цепочек заданий (job chains). С их помощью можно указать условие, только при выполнении которого мы будем диспатчить указанный набор заданий (job).

10.42. Add Str::unwrap

https://github.com/laravel/framework/pull/49779

PR работе со строками. Был метод wrap чтобы обернуть строку указанными символами, теперь также появился и unwrap, чтобы соответственно сделать обратное. Рассмотрим пример. Есть строка с кавычками, используем unwrap и указываем что необходимо убрать обёртку в виде кавычек. И в итоге получаем строку без кавычек. То же самое с фигурными скобками:

Str::unwrap('"Unquote"', '"'); // Unquote

Str::unwrap('{ some: "json" }', '{', '}'); // some: "json"

10.42. Global default options for the http factory

https://github.com/laravel/framework/pull/49767

В PR появился метод с помощью которого можно указать глобально опции. В дальнейшем при использовании нашего приложения, опции у http клиента будут заданы по умолчанию.

10.42. Implement "max" validation rule for passwords

https://github.com/laravel/framework/pull/49739

Правило валидации по паролям. До этого была возможность задать минимальное количество символов в пароле, но не было удобного метода по максимальному количеству. Приходилось добавлять через метод Rules дополнительные правила валидации и писать следующее:

Password::min(8)->rules('max:32');

Теперь же этого делать не придётся, нам добавили сахар с методом по максимальному количеству символов:

Password::min(8)->max(32);

10.42. Add multiple channels/routes to AnonymousNotifiable at once

https://github.com/laravel/framework/pull/49745

Теперь добавлена возможность указывать сразу несколько routes и отправлять уведомления по всем ним сразу.

Как видим в примере, мы отправляем уведомления и на email и по номеру телефона:

NotificationFacade::routes([
    'mail' => ['example@test.local' => 'Test Customer'],
    'vonage' => '+3620123456',
])->not

Видео версия дайджеста

Эти же новости в формате видео отCutCode: