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

PHP Дайджест

Новости

Вышел PHP 8.3.0!

PHP 8.3 – большое обновление языка. Оно содержит множество новых возможностей, таких как явная типизация констант классов, глубокое клонирование readonly-свойств, а также улучшения класса Randomizer. Как всегда, в нём также улучшена производительность, исправлены ошибки и многое другое.

Подробный список нововведений в PHP 8.3 можно найти на странице релиза и в руководстве по обновлению.

Поддержка PHP 8.0 завершена

PHP 8.0.30 стал последним выпуском PHP 8.0. Ветка больше не будет получать официальных обновлений безопасности.

Вышли PHP 8.1.26 и PHP 8.2.13

Релизы с исправлениями ошибок вышли по расписанию.

Ветка PHP 8.1 получит еще один выпуск – PHP 8.1.27, который станет последним выпуском с исправлением ошибок, далее будут выходить только выпуски с исправлением ошибок безопасности.

PHP Foundation исполнилось 2 года!

Фонд PHP Foundation был основан два года назад.

За прошедший год PHP Foundation поддержал работу 6 основных разработчиков и внес значительный вклад в развитие языка PHP.

Ознакомьтесь с отчетом PHP Foundation за ноябрь 2023.

Поддержать PHP Foundation можно с помощью OpenCollective или GitHub Sponsors.

Вышел Tinkerwell 4

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

Представлен Laravel Pulse

Laravel Pulse предоставляет краткую информацию о производительности и использовании вашего приложения. Отслеживайте узкие места, такие как медленные задания и маршруты, находите самых активных пользователей и многое другое.

Он бесплатный, с открытым исходным кодом и готов к расширению.

Вышли Symfony 6.4 и 7.0

Обе версии содержат одинаковый набор функций, за исключением поддержки устаревших функций. Symfony помечает некоторые функции устаревшими и удаляет их спустя два года.

Symfony 6.4 будет содержать устаревшие функции, начиная с Symfony 6.1,
а Symfony 7.0 будет выпущен без поддержки устаревших функций.

Также Symfony 6.4 – версия с долгосрочной поддержкой, которая получает исправления ошибок в течение 3 лет и ошибки безопасности в течение еще 1 года. Symfony 7.0 – обычная версия, которая будет поддерживаться только 8 месяцев.

Ознакомьтесь со списком новых возможностей в серии Living on the edge, чтобы узнать об основных особенностях этих выпусков.

Экосистема разработки в 2023 году

Опубликованы результаты ежегодного исследования JetBrains, в котором приняли участие 26 348 разработчиков со всего мира.

Три самые популярные функции, которые ждут в PHP – Типизированные массивы, тестирование производительности и дженерики.

Напишите в комментариях, какие функции хотели бы вы добавить в PHP.

Ядро PHP

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

????RFC: Resource to object conversion

Ресурсы – устаревшая структура данных, которая уже давно вытеснена объектами. Работа над заменой ресурсов на объекты началась еще в 2013 году, но большинство модулей перешли на нее только в PHP 8.0.

Máté Kocsis предлагает осуществить миграцию в оставшихся модулях и определить политику для дальнейшего развития.

????RFC: Release cycle update

Срок жизни версии PHP составляет 3 года. Многие считают, что это мало, а предрелизный период, составляющий полгода, наоборот, слишком много.

Jakub Zelenka, один из релиз-менеджеров PHP 8.3, предлагает увеличить срок жизни версии PHP до 4 лет (2 года на сопровождение и 2 года на обновления безопасности) и пересмотреть предрелизную фазу тестирования.

????RFC: Change how JIT is disabled by default

В настоящее время JIT работает в режиме `tracing`, но по умолчанию отключен с помощью опции `opcache.jit_buffer_size=0`.

RFC предлагает отключить JIT по умолчанию, установив опцию `opcache.jit=disable`, и увеличить значение `jit_buffer_size` по умолчанию до `64`.

????RFC: Final anonymous classes

В RFC предлагается добавить поддержку окончательных анонимных классов, а также сделать анонимные классы окончательными по умолчанию с возможностью сделать их открытыми с помощью ключевого слова `open`.

Laravel дайджест

Обновления Laravel

10.31. Sleep::until() method

Начинаем с релиза 10.31 класс Sleep, метод until() теперь также принимает строки. Как объясняют в примере из PR, теперь когда timestamp приходит от Redis в виде строки, то не надо делать дополнительных приведений к типу.

10.31. Fix whereHasMorph() with nullable morphs

PR исправляет проблему в методах whereHas() и whereHasMorph() в тех случаях, когда у нас вперемешку существующие связи и null-записи. До этого возникали ошибки и приходил пустой массив. Теперь же эта проблема исправлена.

10.31. Получение фрагментов с помощью методов fragments() и fragmentsIf()

PR от нашего известного разработчика - Tabuna, создателя Orchid. Рад видеть PR от наших - автору респект!

Теперь, используя метод fragments() либо fragmentsIf(), мы можем не передавать конкретные фрагменты. И fragments(), и fragmentsIf() автоматически извлекут и возвратят все обнаруженные фрагменты.

Кстати тоже немножко похвастаюсь - на этой неделе стал контрибьютором. Удивитесь где - в пакете Livewire. Записывал видео урок и нашёл баг. Поправил, и теперь моя аватарка мелькает в контрибьюторах. Повезло что знаком с Pest, и после ревю Тейлора PR был смержен.

10.32. Add @elsePushIf and @elsePush

Новые blade-директивы @elsePushIf и @elsePush. Освежим в памяти что делает @push - с его помощью в Blade могли в определенной view определить cтак и дальше из любых Blade-вьюх пушить в этот стак определённые фрагменты. Был push, был pushIf, теперь также появились директивы elsePushIf и elsePush.

10.32. Additional "present" validation rules

Новые правила валидации presentIf, presentWith и presentWithAll.  До этого у нас был просто Present с проверкой, что элемент должен быть в запросе. Теперь это правило валидации прокачали. 

  1. presentIf - в нём можно указать также дополнительное условие, что он должен присутствовать только если в запросе есть скажем ключ foo и дополнительно он равен единице. В таком случае правило валидации сработает. 

  2. Вариант с отрицанием - present_unless 

  3. present_with_all, когда также в запросе должен присутствовать один из указанных параметров 

  4. present_with_all, когда все указанные параметры должны присутствовать, то тогда правило валидации сработает.

10.33. Add color_hex validation rule

Появилась правило валидации с проверкой что строка является hex-кодом. Как видим из примера, теперь можно проверить, что hex-код валидный: 

$v = Validator::make(['color' => '#fff'], ['color' => 'hex_color']);
$v->passes(); // true
$v = Validator::make(['color' => '#ggg'], ['color' => 'hex_color']);
$v->passes(); // false

10.33. Number utility class

У нас уже были классы по строкам, по массивам, теперь ещё и числа. Всё, забываем про Number формат и переходим на класс Number. А также ожидаем во всех будущих релизах кучу сахара в этот класс. 

Теперь стало удобнее приводить числа к определённому виду когда работаем например, с валютой или с байтами. Также появилась возможность сменить локализацию. Правда ещё не везде, скажем если мы взглянем на метод forHumans, то увидим вот такой вот жёстко заданный массив и поменять значение пока что никак нельзя:

Number::forHumans(1000) // 1 thousand
Number::forHumans(12345) // 12 thousand
Number::forHumans(12345, precision: 3) // 12.345 thousand

Но, как я говорил ранее класс новый ожидаем сюда ещё много-много сахара. В целом ничего сложного, но если вы хотите ролик с подробным освещением этого класса Number, то обязательно пишите в комментариях и он выйдет на канале.

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

Комментарии (0)