Что нового в PHP 8.3

Что нового в PHP 8.3

01 Feb 2023PHP 2012 ~ 2 мин.

PHP 8.3 будет выпущен как обычно в конце ноября 2023 года. В этом посте мы рассмотрим все функции, улучшения производительности, изменения и устаревший функционал

Новая функция json_validate rfc

В PHP 8.3 добавлена ​​новая функция json_validate(), которая возвращает true или false в том случае, если заданная строка является допустимой строкой JSON. До PHP 8.3 единственным способом определить, является ли заданная строка допустимой строкой JSON, была попытка ее декодирования и проверка наличия каких-либо ошибок. Новая функция json_validate() использует тот же базовый синтаксический анализатор JSON, что и PHP, но потребует меньше памяти:


json_validate('[1, 2, 3]'); //true
json_validate('{1, 2, 3]'); //false


Динамический доступ к константам класса и Enum rfc

До PHP 8.3 синтаксис доступа к константам класса типа ClassName::{$varName}  был запрещен и приводил к синтаксической ошибке:


Parse error: syntax error, unexpected token ";", expecting "(" in ... on line ...

То же ограничение применялось и к Enum, где было невозможно получить элемент Enum динамически:


Parse error: syntax error, unexpected token "->", expecting "(" in ``` on line ```

Теперь PHP 8.3 и более поздние версии поддерживают динамическое получение констант класса и объектов Enum с именем переменной:


class MyClass {
public const MY_CONST = 42;
}

$constName = 'MY_CONST';

echo MyClass::{$constName};

Функция gc_status() возвращает дополнительную информацию GC rfc

Функция gc_status() возвращает статистику сборщика мусора PHP, например, работает ли сборщик мусора, защищен ли сборщик мусора и размер буфера. Эта информация может быть полезна при отладке долго работающих PHP-приложений для обнаружения и оптимизации использования памяти.


var_dump(gc_status());

Новый метод \Random\Randomizer::getBytesFromString rfc

Класс \Random\Randomizer в PHP 8.3 поддерживает новый метод getBytesFromString, который возвращает последовательность случайных чисел запрошенной длины (параметр $length), содержащую только байты из запрошенной последовательности байтов (параметр $string).


namespace Random;  

class Randomizer {
// ...
public function getBytesFromString(string $string, int $length): string { }
}

 

$rng = new Random\Randomizer();
$crockfordAlphabet = '0123456789ABCDEFGHJKMNPQRSTVWXYZ';

$rng->getBytesFromString($crockfordAlphabet, 5); // "5YH8T"

Новые методы \Random\Randomizer::getFloat() и nextFloat() rfc

RFC добавляет новые методы в расширении Random, генерирующие случайное значение. \Random\Randomizer::getFloat()\Random\Randomizer::nextFloat(). Например если необходимо сгенерировать случайное число float между 0 <и < 10 и в диапазоне 0 <= и < 1:


$rng = new Random\Randomizer();
$rng->getFloat(0, 10, \Random\IntervalBoundary::OpenOpen); // 9.3835746900717

...

$rng = new Random\Randomizer();
$rng->nextFloat(); // 0.21185336351144


unserialize(): Вывод E_WARNING ошибок вместо E_NOTICE

До версии 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.3 был увеличен, а в будущем возможно его обновление для создания исключений.


Что думаешь?

Категории
  • PHP 58
  • Заметки 12
  • Флуд 2
  • Nginx 2
  • ИТ новости 2
  • Видео 1
  • Архитектура 0
Делаем из мухи слона

sergeymukhin.com

персональный блог о веб-разработке от разработчика Сергея Мухина. Блог основан в 2018 году, и уделяет основное внимание последним тенденциям, учебным пособиям, статьям с отзывами, а также советам и рекомендациям, позволяющим начинающим девелоперам встать быстрее на правильную дорогу веб разработки.