Всем привет! Краткий обзор новостей из мира PHP и Laravel за ноябрь 2023 г.
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 за ноябрь 2023.
Поддержать PHP Foundation можно с помощью OpenCollective или GitHub Sponsors.
Вышел Tinkerwell 4
Вышла новая версия популярного инструмента для запуска 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, чтобы узнать об основных особенностях этих выпусков.
Экосистема разработки в 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 предлагает осуществить миграцию в оставшихся модулях и определить политику для дальнейшего развития.
Срок жизни версии 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 с проверкой, что элемент должен быть в запросе. Теперь это правило валидации прокачали.
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, то обязательно пишите в комментариях и он выйдет на канале.