Началось альфа-тестирование PHP 8.3

Новости мира unix. Хотите узнать секрет вечного счастья? Откройте страницу 246.
Ответить
acolyte
Аватара пользователя
Сообщения: 3258
Зарегистрирован: 20.08.2022

#

Началось альфа-тестирование PHP 8.3
Дата публикации:Fri, 09 Jun 2023 12:34:46 +0300




Представлен первый альфа-выпуск новой ветки языка программирования 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().


Новость позаимствована с opennet.ru
Ссылка на оригинал: https://www.opennet.ru/opennews/art.shtml?num=59270

Жизнь за Нер'зула!

Ответить