Ноябрь 2023

Ноябрь 2023

Подборка свежих новостей, инструментов, видео и материалов из мира PHP.

Приятного чтения!

Новости

Вышел PHP 8.3.0!

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

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

Установка/Обновление до PHP 8.3

Windows: Скомпилированные двоичные файлы доступны на сайте windows.php.net.

Ubuntu/Debian: PHP 8.3 доступен на ondrej/php PPA.

Fedora/RHEL/CentOS/Alma/Rocky: Доступен в виде коллекции программ php83 в репозитории Remi.

macOS: PHP 8.3 можно установить с помощью Homebrew совместно с shivammathur/homebrew-php.

Docker: Образы PHP 8.3 доступны на Docker Hub с тегами 8.3*.

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

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

Вышли PHP 8.1.26 и PHP 8.2.13

Выпуски 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.

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

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

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

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

PHP Core

Большинство новостей ядра 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 предлагает один из трёх вариантов улучшения работы с анонимными классами:

  1. Добавить поддержку окончательных анонимных классов (синтаксис new final class {}, без изменений в обратной совместимости).

  2. ИЛИ сделать все анонимные классы окончательными по умолчанию, без возможности сделать их окончательными (изменение в обратной совместимости).

  3. ИЛИ сделать все анонимные классы окончательными по умолчанию, предоставить необязательное ключевое слово open, чтобы сделать их неокончательными (как в Kotlin, new open class {}, изменение в обратной совместимости).

📣 RFC: Improve callbacks in ext/dom and ext/xsl

Niels Dossche предлагает разрешить использовать callback-функции в методах XSLTProcessor::registerPHPFunctions() и DOMXPath::registerPhpFunctions().

📣 RFC: Property Hooks

В этом RFC Ilija Tovillo и Larry Garfield предлагают объявлять виртуальные свойства с помощью функций get/set.

Дизайн и синтаксис больше всего похожи на Kotlin, хотя в нём также прослеживается влияние C# и Swift.

1<?php
2 
3class User implements Named
4{
5 private bool $isModified = false;
6 
7 public function __construct(private string $first, private string $last) {}
8 
9 public string $fullName {
10 // Override the "read" action with arbitrary logic.
11 get => $this->first . " " . $this->last;
12 
13 // Override the "write" action with arbitrary logic.
14 set($value) => [$this->first, $this->last] = explode(' ', $value);
15 }
16}

Интересным побочным эффектом этого RFC является то, что он позволяет объявлять абстрактные свойства в интерфейсах:

1<?php
2 
3abstract class A
4{
5 // Extending classes must have a publicly-gettable property.
6 abstract public string $readable { get; }
7 
8 // Extending classes must have a protected- or public-writeable property.
9 abstract protected string $writeable { set; }
10 
11 // Extending classes must have a protected or public symmetric property.
12 abstract protected string $both { get; set; }
13}
14 
15class C extends A
16{
17 // This satisfies the requirement and also makes it settable, which is valid.
18 public string $readable;
19 
20 // This would NOT satisfy the requirement, as it is not publicly readable.
21 protected string $readable;
22 
23 // This satisfies the requirement exactly, so is sufficient. It may only
24 // be written to, and only from protected scope.
25 protected string $writeable {
26 set => $field = $value;
27 }
28 
29 // This expands the visibility from protected to public, which is fine.
30 public string $both;
31}

Вы уже можете попробовать хуки свойств на 3v4l.org, благодаря Sjon Hortensius.

И оставить свой отзыв на RFC Vote: Property Hooks.

Инструменты

  • php-tui/php-tui – Фреймворк для создания консольных приложений.

  • Crell/Serde – Надёжная библиотека Serde (сериализация/десериализация).

  • buggregator/server – Лёгкий автономный сервер, предлагающий ряд отладочных функций для PHP-приложений, включая Xhprof Profiler, Symfony VarDumper Server, SMTP Server, Sentry Compatibility, Monolog Server и HTTP Requests Dump Server. В комплект поставки входит buggregator/trap – консольный мини-сервер и помощник для более удобной отладки в PHP.

  • NoiseByNorthwest/php-spx – Простой и понятный модуль для профилирования PHP со встроенным веб-интерфейсом.

  • reliforp/reli-prof – Профилировщик выборки или профилировщик памяти для PHP, написанный на PHP, который считывает информацию о запущенном PHP VM извне процесса. Позволяет находить узкие места в производительности или утечки памяти скриптов без изменения целевого скрипта или загрузки модулей. В качестве альтернативы можно попробовать arnaud-lb/php-memory-profiler – модуль для профилирования памяти для PHP, он помогает найти утечки памяти в PHP-скриптах.

  • saloonphp/xml-wrangler – Библиотека, предназначенная для облегчения чтения и записи XML. Также ознакомьтесь с пакетом veewee/xml, предоставляющий все инструменты для работы с XML в PHP без лишней головной боли.

  • jolicode/JoliMarkdown – Синтаксический корректор для контента в формате markdown. Ознакомьтесь с подробностями в знакомстве с JoliMarkdown.

  • cerbero90/lazy-json – Пакет, не зависящий от фреймворка, для рекурсивной загрузки JSON любого размера и из любого источника в ленивые коллекции Laravel.

  • staabm/phpstan-baseline-analysis – Анализирует базовые файлы PHPStan и создаёт агрегированные отчёты о тенденциях ошибок.

  • hirethunk/verbs – Пакет для поиска событий.

  • spiral/json-schema-generator – Предоставляет возможность генерировать JSON-схемы из классов DTO.

  • krowinski/php-mysql-replication – Реализация протокола репликации MySQL на чистом PHP. Позволяет получать события типа insert, update, delete с их данными и необработанными SQL-запросами.

Laravel

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

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

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

Symfony

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

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

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

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

Yii

Статьи

Видео

Аудио

Сергей Пантелеев
Релиз-менеджер PHP 8.2
Роман Пронский
Администратор PHP Foundation
Краткий дайджест в нашем Telegram
Ещё больше новостей в блоге компании JetBrains
PHP-дайджест в видео формате на канале CutCode
Рассылка PHP-дайджестов
Подпишитесь на рассылку, чтобы не пропустить новый выпуск

Нажимая «Подписаться» я даю согласие на обработку персональных данных.

Мы заботимся о ваших данных и не будем злоупотреблять доверием.