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

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

PHP Дайджест

Новости

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

⛔ Ветка PHP 8.1 прекратила активную поддержку и будет получать только обновления с исправлениями безопасности.

В этом большом обновлении представлена официальная версия AI Assistant, добавлена поддержка Pest и PHP 8.3, улучшена поддержка Symfony, улучшен интерфейс и многое другое.

В этом выпуске добавлена поддержка PHP 8.3, Flame-графиков и управляющих сокетов.

Современный сервер PHP-приложений, написанный на Go, позволяет создать PHP-сервер с помощью всего одной команды.

Laravel Octane в тестовом режиме уже поддерживает работу с FrankenPHP. Видеообзор - https://youtu.be/DgVLt7j8Nxo

Репозиторий с популярным пакетом для проверки кода PHP_CodeSniffer от компании Squizlabs объявлен устаревшим.Дальнейшая разработка будет вестись в новом репозитории.

Как было объявлено в сентябре, Twig 2 больше не будет получать обновлений, пользователям рекомендуется обновиться до Twig 3.

Ядро PHP

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

Max Semenik предлагает добавить новый атрибут `#[NotSerializable]` для предотвращения сериализации класса.

Это может помочь писать меньше кода и лучше анализироваться статическими анализаторами:

#[NotSerializable] class MyClass { } serialize(new MyClass()); // Exception: Serialization of 'MyClass' is not allowed

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

Derick Rethans предлагает создать новый Git-репозиторий, чтобы собрать все политики в одном месте.

RFC, о котором мы говорили в прошлых выпусках, перешел в стадию голосования, которая продлится до 11 января 2024 года.

Отчасти из-за сложности постановки вопроса RFC был отклонен.

После получения обратной связи Daniil Gentili выбрал основное направление и предложил новую версию RFC: сделать все анонимные классы по умолчанию окончательными, предоставить необязательное ключевое слово `open`, чтобы сделать их неокончательными (как в Kotlin, `new open class {}`).

Еще один RFC из прошлого выпуска принят единогласно. PHP 8.4 будет поставляться с отключенным по умолчанию JIT, за счет установленной опции `opcache.jit=disable`, а значение опции `jit_buffer_size` по умолчанию будет увеличено до `64`.В настоящее время JIT работает в режиме `tracing`, но по умолчанию отключен с помощью опции `opcache.jit_buffer_size=0`.

Валентин Удальцов реализовал обращение к объектам, созданным через `new`, не оборачивая их в скобки. Во избежание неоднозначности это будет работать только при наличии скобок аргументов конструктора. Поддерживаются также динамические имена классов и анонимные классы.

Предложение ещё не оформлено в RFC, напишите в комментариях, как вы относитесь к такой реализации?

Laravel дайджест

Обновления Laravel

10.34. Метод ensure с несколькими типами

Метод ensure(). Давайте напомню - этот метод проверяет каждый элемент коллекции на соответствие указанному типу. Если не соответствует, то мы получаем исключение. До этого апдейта мы могли указать только один тип, теперь же с помощью массива мы можем указывать несколько типов, все из которых будут доступны для элементов коллекции.

10.34. Метод missing для группы роутов

Следующее нововведение из 10.34 затрагивает роуты и метод missing, который нам необходим для тех случаев, когда у нас Route отдаёт 404 ошибку и мы можем изменить response. До этого мы не могли работать в рамках этого метода через группы и нам приходилось для каждого роута в группе указывать одинаковые конструкции с этим методом. Теперь же работает и через группы и мы можем сразу для всей группы роутов указать поведение когда у нас роут выдал 404 исключение.

10.34.Правило валидации “Extensions”

Это нововведение затрагивает форм реквесты, валидацию. До этого у нас было правило валидации mimes - проверка на соответствие mime-типа Теперь же появилось и правило-валидация более простое - extensions. Чтобы просто проверить расширение файла, соответствует ли оно указанному.

10.34. Alias Number class

Нас ждёт ещё пара интересных нововведений - support-класс Number теперь обзавёлся и Alias. Давайте посмотрим на изменение. Оно простое, просто добавлен Alias под Number, чтобы мы могли его использовать без импортов. На канале кстати есть подробный обзор класса Number, он получился интересным. Там мы заглядывали под капот и смотрели каждый метод этого класса.

10.34. Conditionable трейт для TestResponse

Последнее нововведение из релиза 10.34. Response объект, TestResponse обзавёлся также трейтом Conditionable, который теперь нам даёт возможность через метод по определённому условию добавлять методы тестирования Response и более удобно взаимодействовать с объектом.

10.35. Conditionable трейт для AssertableJson

Перемещаемся к релизу 10.35, но не отходим от тестов. Тот же самый Трейт Conditionable также добавлен и к AssertableJson классу. Суть такая же - избавляемся от лишних if-конструкций и используем новый метод When.

10.35. Опция --with-secret для команды artisan down

Следующее нововведение затрагивает Artisan-команду Down которая переключает наше приложение в режим технических работ и также добавлена опция --with-secret, которая у нас генерирует рандомный секретный ключ на основе stringable-объекта и метода Random. И нам в последующем чтобы выключить этот режим потребуется этот секретный код ввести.

10.35. Blade директива @use()

Друзья и напоследок по 10.35. Всё-таки идеологию с Volt продолжают форсировать. До этого я как раз при обзоре Volt вам говорил о том, что больше всего меня бесит что приходится делать импорты через @php, @endphp, и всё это выглядит ужасно, но теперь мы можем делать в блейде следующее: появилась директива @use() и мы с помощью этой директивы указываем все необходимые импорты. Как и ранее, я всё ещё против логики в Blade-файлах, но в целом, иногда вот такие импорты необходимы. Даже вот в тех примерах, которые указаны в PR, когда нам нужно просто импортировать enum.

10.36.

Друзья, я думаю после релиза 10.35 вы ожидаете релиз 10.36. Но не тут-то было - он у нас куда-то пропал. И следующий будет 10.37.

10.37. Метод engine для Blueprint

Немного сахара в объекты blueprint и scema. До этого чтобы указать Engine нам необходимо было пользоваться свойством, теперь нам доступен метод. И помимо Engine нам также доступны методы по изменению - charset и collation.

10.37. Получение индексов foreign ключей таблицы

Передвигаемся к следующему PR. В данном случае у нас фасад schema и появились новые методы для нашего удобства - getIndexes() для получения всех индексов, и также если мы с вами заглянем в связанный PR, также появился метод по получению всех foreign keys - getForeignKeys().

10.37. Метод assertInvalid для проверки нескольких ошибок

И напоследок по 10.37 - тесты. Метод assertInvalid() для проверки сообщения об ошибках. До этого, если нам необходимо было проверить несколько ошибок в рамках одного поля, приходилось дублировать метод. Теперь же мы можем передавать массив и проверять весь набор ошибок от определённого поля.

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

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

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