Началось альфа-тестирование PHP 8.3
Представлен первый альфа-выпуск новой ветки языка программирования PHP 8.3. Релиз намечен на 23 ноября. Основные новшества, уже доступные для тестирования или планируемые к реализации в PHP 8.3:
- Во время клонирования классов предоставлена возможность повторной инициализации свойств с атрибутом «readonly». Переопределение readonly-свойств допускается только внутри функции »__clone»:
readonly class Post { public function __construct( public DateTime $createdAt, ) {} public function __clone() { $this->createdAt = new DateTime(); // разрешено, несмотря на то, что свойство "createdAt" доступно в режиме только для чтения. } }
- Добавлена возможность создания анонимных классов в режиме только для чтения:
$class = new readonly class { public function __construct( public string $foo = 'bar', ) {} };
- Добавлена функция json_validate () для быстрой проверки соответствия строки формату JSON без выполнения операций декодирования.
json_validate(string $json, int $depth = 512, int $flags = 0): bool
В класс Randomizer, предоставляющий высокоуровневый API для генерации псеводослучайных чисел и последовательностей, добавлены новые методы: getBytesFromString для формирования строки заданного размера, использующей в случайном порядке символы, присутствующие в другой строке; getFloat и nextFloat для генерации случайного числа с плавающей запятой, укладывающегося в указанный диапазон.
- Добавлена
возможность извлечения констант, используя синтаксис динамических классов:
class Foo { const BAR = 'bar'; } $name = 'BAR'; // Ранее для извлечения константы BAR нужно было вызывать constant(Foo::class . '::' . $name); // А теперь достаточно указать Foo::{$name};
Добавлена генерация отдельных исключений (DateMalformedIntervalStringException, DateInvalidOperationException, DateRangeError) в случае проблем, возникающих в операциях работы с датами и временем.
Улучшена обработка ошибок, возникающих в процессе разбора сериализированных данных в функции unserialize (). В случае проблем unserialize () теперь выдаёт код E_WARNING вместо E_NOTICE.
Добавлены настройки для защиты от переполнения стека. В ini-файл добавлены директивы zend.max_allowed_stack_size и zend.reserved_stack_size, определяющие максимально разрешённый и зарезервированный размер стека. Программа будет завершаться ошибкой при приближении к исчерпанию стека, когда стек заполнен больше, чем на разницу между значениями zend.max_allowed_stack_size и zend.reserved_stack_size (выполнение будет остановлено не доводя ситуацию до возникновения segmentation fault). По умолчанию значение zend.max_allowed_stack_size выставлено в 0 (0 — размер определяется автоматически, для отключения ограничения можно выставить -1).
Добавлены новые POSIX-функции posix_sysconf (), posix_pathconf (), posix_fpathconf () и posix_eaccess ().
Источник: http://www.opennet.ru/opennews/art.shtml? num=59270
© OpenNet