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
Первый PR обновления 10.39 затрагивает джобы и добавляет новый метод Tries для динамического объявления количества попыток. Раньше было только свойство, теперь есть метод и появилась возможность более универсально определить поведение.
10.39. Add 'Roundrobin' Symfony mailer transport driver
В раздел по отправке email уведомлений добавили драйвер Roundrobin. Информацию по порядку работы добавлена в документацию Laravel.
10.40. Add session except method
В рамках сессий появился новый метод except. С его помощью можно получить все элементы сессии за исключением тех, которые мы укажем.
10.40. Add Number::clamp
Этот PR затрагивает класс Number. Как я вам говорил ранее, когда подробно освещал этот класс в ролике на YouTube, последующие релизы laravel будут добавлять всё больше сахара в этот класс. Так и происходит. Появился новый метод clamp. “Зажимаем” число в диапазоне от минимума до максимума:
10.40. Make the Schema Builder macroable
В Schema Builder появился Trait macroable. Всё чаще он появляется в различных сущностях и теперь Schema Builder не исключение. Можем где-нибудь в провайдере добавлять свои методы через macro и позже пользоваться им в миграциях.
10.40. Add assertViewEmpty to TestView
Следующий Pull Request добавляет метод в процесс тестирования assertViewEmpty, чтобы проверить что у нас View в Responce срендерило пустой результат.
10.40. Update tailwind.blade.php for dark mode
PR, который добавляет тёмный режим в тему для пагинатора на основе TailwindCSS.
10.40. Allow Vite asset path customization
Интересный PR. Раньше, чтобы получить итоговый путь до ассетов у нас был хелпер Asset. Но если у нас в системе зарегистрированы Tenants, то необходимо получить динамический итоговый url до ассета, и с этим возникали сложности. Теперь же в рамках фасада Vite появился метод createAssetPathUsing и мы можем динамически задавать url на основе той логики, которая нам необходима.
10.40. Add assertCount test helper
PR по тестам - assertCount. Используется чтобы проверить какое количество заданий (Jobs) добавлено в очередь.
10.40. Add APA style title helper
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
Опять класс Number и метод spell немного модифицирован. Теперь появилась возможность задать порог threshold parameter, чтобы приводить число к тому, как мы его произносим только тогда когда оно в этом диапазоне.
Напомню, метод spell приводит числа к строке, к тому как мы это число произносим. Например 8 будет eight.
Теперь появились два новых параметра, а именно After и Until. Рассмотрим примеры:
Глядя на тесты, мы видим, что если мы передаем “9”, но при этом указываем в параметре”after: 10”, то не получим “nine” строку, а “9”. А если укажем 11, с параметром ”after: 10”, то уже результат будет строка - “eleven”. То же самое с параметром Until, только наоборот.
10.41. Allow job chains to be conditionally dispatched
Новые методы dispatchIf и dispatchUnless для цепочек заданий (job chains). С их помощью можно указать условие, только при выполнении которого мы будем диспатчить указанный набор заданий (job).
10.42. Add Str::unwrap
PR работе со строками. Был метод wrap чтобы обернуть строку указанными символами, теперь также появился и unwrap, чтобы соответственно сделать обратное. Рассмотрим пример. Есть строка с кавычками, используем unwrap и указываем что необходимо убрать обёртку в виде кавычек. И в итоге получаем строку без кавычек. То же самое с фигурными скобками:
10.42. Global default options for the http factory
В PR появился метод с помощью которого можно указать глобально опции. В дальнейшем при использовании нашего приложения, опции у http клиента будут заданы по умолчанию.
10.42. Implement "max" validation rule for passwords
Правило валидации по паролям. До этого была возможность задать минимальное количество символов в пароле, но не было удобного метода по максимальному количеству. Приходилось добавлять через метод Rules дополнительные правила валидации и писать следующее:
Теперь же этого делать не придётся, нам добавили сахар с методом по максимальному количеству символов:
10.42. Add multiple channels/routes to AnonymousNotifiable at once
Теперь добавлена возможность указывать сразу несколько routes и отправлять уведомления по всем ним сразу.
Как видим в примере, мы отправляем уведомления и на email и по номеру телефона:
Видео версия дайджеста
Эти же новости в формате видео от CutCode: