PHP 8.3: Что нового. Изменения и новый функционал.

Источник: «PHP 8.3: new features (with RFCs) and release date»
PHP 8.3 выйдет 23 ноября 2023 года, и, как обычно, вам нужно быть в курсе новых функций и критических изменений, чтобы упростить переход.

PHP — проект с открытым исходным кодом. Узнать то, что будет включено в новую версию занимает всего минуту поиска. Например, на этой странице перечислены все принятые RFC для PHP 8.3.

Ниже вы найдёте краткий список нововведений с примерами кода.

Когда выйдет PHP 8.3?

Согласно шестимесячной фазы пре-релизов, PHP 8.3 выйдет 23 ноября 2023 года после трёх альфа-релизов, трёх бета-версий и шести релиз-кандидатов.

ДатаРелиз
8 Июня, 2023Первый альфа-релиз
22 Июня, 2023Второй альфа-релиз
6 Июля, 2023Третий альфа-релиз
18 Июля, 2023Заморозка функций
20 Июля, 2023Первый бета-релиз
3 Августа, 2023Второй бета-релиз
17 Августа, 2023Третий бета-релиз
31 Августа, 2023Первый релиз-кандидат
14 Сентября, 2023Второй релиз-кандидат
28 Сентября, 2023Третий релиз-кандидат
12 Октября, 2023Четвёртый релиз-кандидат
26 Октября, 2023Пятый релиз-кандидат
9 Ноября, 2023Шестой релиз-кандидат
23 Ноября, 2023GA

PHP 8.3 Новые функции

json_validate()

Вместо использования json_decode() для проверки JSON-строки теперь можно использовать функцию json_validate(). Согласно RFC она потребляет меньше ресурсов.

json_validate('{ "foo": "bar", }');

// Syntax error
echo json_last_error_msg();

Как видите, json_validate() возвращает логическое значение, и вы можете получить сообщение об ошибке с помощью json_last_error() или json_last_error_msg().

Узнать больше можно в статье PHP 8.3: Добавлена функция json_validate

gc_status возвращает дополнительную информацию

В PHP 8.3 функция gc_status() возвращающая информацию о GC будет возвращать четыре новых поля с дополнительной информацией. В массив с возвращаемой информацией добавлены поля: running, protected, full и buffer_size.

var_dump(gc_status());

Узнать больше можно в статье PHP 8.3: gc_status дополнительная информацию о GC

PHP 8.3 Изменения синтаксиса/функциональности

unserialize() обновление ошибки E_NOTICE до E_WARNING

До версии PHP 8.3 при передаче недопустимой строки функции unserialize() в некоторых случаях, например при синтаксической ошибке в сериализованной строке выдавалось PHP уведомление (E_NOTICE). Начиная с версии PHP 8.3 и в более поздних версиях это было изменено на выдачу предупреждений (E_WARNING). Кроме того, некоторые условия функции serialize() изменены, чтобы тоже выдавать E_WARNING

unserialize("invalid-string");
- PHP Notice:  unserialize(): Error at offset 0 of 14 bytes
+ PHP Warning: unserialize(): Error at offset 0 of 14 bytes

В PHP 8.0 уровень сообщений об ошибках PHP по умолчанию был изменён на E_ALL. Если значение error_reporting не было изменено в пользовательском INI-файле, это не должно привести к возникновению каких-либо новых ошибок, кроме изменения уровня серьёзности.

Узнать больше можно в статье PHP 8.3: unserialize() обновление ошибки E_NOTICE до E_WARNING

Дополнения Randomizer

Добавятся три новых метода в \Random\Randomizer и Перечисление IntervalBoundary, которое используется в одном из методов:

final class Randomizer {
public function getBytesFromString(string $string, int $length) : string {}
public function nextFloat() : float {}
public function getFloat(float $min, float $max, IntervalBoundary $boundary = IntervalBoundary::ClosedOpen) : float {}
}

enum IntervalBoundary
{
case ClosedOpen;
case ClosedClosed;
case OpenClosed;
case OpenOpen;
}

Список изменений:

  1. Переименован getBytesFromAlphabet в getBytesFromString, добавлено перечисление GetFloatBounds
  2. Переименован GetFloatBounds в IntervalBoundary.
  3. Переименован третий параметр getFloat() с $bounds в $boundary, чтобы он соответствовал именам перечисления.

Узнать подробности можно в статье PHP 8.3: Дополнение Randomizer

Дополнительные материалы

Предыдущая Статья

PHP 8.3: unserialize() обновление ошибки E_NOTICE до E_WARNING

Следующая Статья

Laravel: Рекомендации на 2022 год. Полное руководство