Релиз языка программирования PHP 8.3
Автор
Сообщение
news_bot ®
Стаж: 6 лет 9 месяцев
Сообщений: 27286
После года разработки представлен релиз языка программирования PHP 8.3. Новая ветка включает серию новых возможностей, а также несколько изменений, нарушающих совместимость.
Ключевые изменения в PHP 8.3:
- Во время клонирования классов предоставлена возможность повторной инициализации свойств с атрибутом "readonly". Переопределение readonly-свойств допускается только внутри функции "__clone":
readonly class Post
{
public function __construct(
public DateTime $createdAt,
) {}
public function __clone()
{
$this->createdAt = new DateTime(); // разрешено, несмотря на то, что свойство "createdAt" доступно в режиме только для чтения.
}
}
- Предоставлена возможность использования констант с указанием типа в классах, типажах и перечислениях:
class Foo
{
const string BAR = 'baz';
}
- Добавлена поддержка атрибута "#[Override]", при помощи которого разработчик может информировать интерпретатор о том, что отмеченный метод переопределяет какой-то родительский метод. В случае если переопределения не будет интерпретатор выведет ошибку.
- Изменена обработка отрицательных значений в качестве индекса массива. Например, при добавлении в пустой массив элемента с номером "-5" и добавлении ещё одного элемента, раньше второй элемент сохранялся с индексом "0", а начиная с версии PHP 8.3 будет сохраняться с индексом "-4".
$array = [];
$array[-5] = 'a';
$array[] = 'b';
var_export($array);
// Было array (-5 => 'a', 0 => 'b')
// Стало array (-5 => 'a', -4 => 'b')
- Добавлена возможность создания анонимных классов в режиме только для чтения:
$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.
- Внесены изменения в функцию range(). Обеспечена генерация исключения при попытке передачи объектов, ресурсов или массивов в переменных, определяющих границы диапазона, а также при указании отрицательного значения в параметре $step или неопределённого значения в любом параметре. Обеспечен вывод списка символов при указании строк вместо чисел (например, "range('5', 'z')").
- Изменено поведение типажей со статическими свойствами, которые теперь переопределяют статические свойства, унаследованные из родительского класса.
- Добавлены настройки для защиты от переполнения стека. В 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().
- Добавлена функция mb_str_pad, представляющая собой аналог строковой функции str_pad(), рассчитанный на работу с многобайтовыми кодировками, такими как UTF-8.
- Разрешено создание замыканий из методов и передачи именованных аргументов в эти замыкания.
$test = new Test();
$closure = $test->magic(...);
$closure(a: 'hello', b: 'world');
- Изменено поведение при обработке видимости констант в интерфейсах.
interface I {
public const FOO = 'foo';
}
class C implements I {
private const FOO = 'foo';
}
- Расширены возможности функций array_sum(), array_product(), posix_getrlimit(), gc_status(), class_alias(), mysqli_poll(), array_pad() и proc_get_status().
- Объявлена устаревшей возможность передачи отрицательного значения
$widths в mb_strimwidth(). Удалена константа NumberFormatter::TYPE_CURRENCY. Прекращена поддержка вызова функции ldap_connect() с двумя параметрами $host и $port. Удалена настройка
opcache.consistency_checks.
===========
Источник:
OpenNet.RU
===========
Похожие новости
- Главная ссылка к новости (https://www.php.net/archive/20...)
- OpenNews: Релиз языка программирования PHP 8.2
- OpenNews: Предварительный выпуск проекта PXP, развивающего расширенный диалект языка PHP
- OpenNews: Перехвачен контроль над 14 PHP-библиотеками в репозитории Packagist
- OpenNews: Объявлено о создании организации PHP Foundation
- OpenNews: Отчёт о компрометации git-репозитория и базы пользователей проекта PHP
Похожие новости:
- Уязвимости в PHP, GStreamer, Xen, Node.js, Python, GNOME Files и librsvg
- Началось альфа-тестирование PHP 8.3
- Предварительный выпуск проекта PXP, развивающего расширенный диалект языка PHP
- Злоумышленники получили контроль над Python-пакетом ctx и PHP-библиотекой phpass
- Релиз языка программирования PHP 8.1
- Объявлено о создании организации PHP Foundation
- Web-фреймворк Pusa, переносящий логику JavaScript-фронтэнда на сторону сервера
- Выпуск PHPStan 1.0, статического анализатора для кода на языке PHP
- Локальная root-уязвимость в PHP-FPM
- Уязвимость в PHP, позволяющая обойти ограничения, заданные в php.ini
Теги для поиска: #_php
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 21-Ноя 19:32
Часовой пояс: UTC + 5
Автор | Сообщение |
---|---|
news_bot ®
Стаж: 6 лет 9 месяцев |
|
После года разработки представлен релиз языка программирования PHP 8.3. Новая ветка включает серию новых возможностей, а также несколько изменений, нарушающих совместимость. Ключевые изменения в PHP 8.3:
=========== Источник: OpenNet.RU =========== Похожие новости
|
|
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 21-Ноя 19:32
Часовой пояс: UTC + 5