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

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

PHP Дайджест

Новости

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

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

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 можно с помощью OpenCollective или GitHub Sponsors.

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

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

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

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

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

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

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

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

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

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

Ядро PHP

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

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

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

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

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

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

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

В 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 с проверкой, что элемент должен быть в запросе. Теперь это правило валидации прокачали.

  • presentIf - в нём можно указать также дополнительное условие, что он должен присутствовать только если в запросе есть скажем ключ foo и дополнительно он равен единице. В таком случае правило валидации сработает.
  • Вариант с отрицанием - present_unless
  • present_with_all, когда также в запросе должен присутствовать один из указанных параметров
  • 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, то обязательно пишите в комментариях и он выйдет на канале.

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

Начать дискуссию