Восьмеричные целые числа теперь могут использовать явный префикс
0o
/0O
в целочисленных литералах,
аналогично двоичным и шестнадцатеричным целочисленным литералам.
<?php
014; // Восьмеричный литерал без префикса
0o14; // Восьмеричный литерал с префиксом
?>
Добавлена поддержка распаковки массивов со строковыми ключами.
<?php
$arr1 = [1, 'a' => 'b'];
$arr2 = [...$arr1, 'c' => 'd']; //[1, 'a' => 'b', 'c' => 'd']
?>
Теперь можно указать именованные аргументы после распаковки аргументов. например: foo(...$args, named: $arg).
При загрузке файлов появился новый ключ full_path
,
который содержит полный путь (а не только относительный) загруженного файла.
Предназначен для использования вместе с HTML-атрибутом webkitdirectory.
Добавлена поддержка перечислений.
Добавлена поддержка файберов.
Замыкания для callback-функций теперь можно создавать с помощью синтаксиса myFunc(...)
,
который идентичен синтаксису Closure::fromCallable('myFunc')
.
Замечание:
...
является частью синтаксиса, а не пропуском.
Добавлена поддержка пересечения типов.
Пересечения типов нельзя использовать вместе с объединением типов.
Добавлен новый тип возвращаемого значения never. Тип указывает на то, что функция либо вызывает exit(), либо выбрасывает исключение, либо не завершается.
new
в инициализации класса
Теперь можно использовать выражения new ClassName()
в качестве
значения по умолчанию для параметра, статической переменной,
инициализаторов глобальных констант и в качестве аргументов атрибутов.
Теперь объекты также можно передавать в define().
Добавлена поддержка readonly-свойств.
Добавлена поддержка модификатора final при определении констант класса. Кроме того, константы интерфейса по умолчанию становятся переопределяемыми.
Добавлена опция CURLOPT_DOH_URL
.
Добавлены параметры для сертификата BLOB-объекта, доступные с libcurl >= 7.71.0:
CURLOPT_ISSUERCERT_BLOB
CURLOPT_PROXY_ISSUERCERT
CURLOPT_PROXY_ISSUERCERT_BLOB
CURLOPT_PROXY_SSLCERT_BLOB
CURLOPT_PROXY_SSLKEY_BLOB
CURLOPT_SSLCERT_BLOB
CURLOPT_SSLKEY_BLOB
Добавлен класс CURLStringFile, который можно использовать для отправки файла из строки (string), а не из файла:
<?php
$file = new CURLStringFile($data, 'filename.txt', 'text/plain');
curl_setopt($curl, CURLOPT_POSTFIELDS, ['file' => $file]);
?>
Добавлен формат статуса openmetrics. Prometheus может использовать его для получения метрик FPM.
Добавлен новый пул для диспетчера динамических процессов под названием pm.max_spawn_rate
.
Он позволяет запускать несколько дочерних процессов более быстрыми темпами, если выбран динамический pm.
Значение по умолчанию - 32
, которое ранее было фиксированным значением.
Поддержка Avif теперь доступна с помощью imagecreatefromavif() и imageavif(), если libgd был собран с поддержкой Avif.
Следующие функции hash(), hash_file()
и hash_init() теперь поддерживают дополнительный необязательный аргумент
options
, который можно использовать для передачи специфичных для алгоритма данных.
Добавлена поддержка MurmurHash3
с поддержкой потоковой передачи.
Реализованы следующие варианты:
Начальное состояние хеширования можно передать с помощью ключа seed
в массиве options
, например:
<?php
$h = hash("murmur3f", $data, options: ["seed" => 42]);
echo $h, "\n";
?>
0
до определённого платформой значения UINT_MAX
, обычно - 4294967295
.
Добавлена поддержка xxHash
.
Реализованы следующие варианты:
Начальное состояние хеширования можно передать с помощью ключа seed
в массиве options
, например:
<?php
$h = hash("xxh3", $data, options: ["seed" => 42]);
echo $h, "\n";
?>
secret
в массиве options
:
<?php
$h = hash("xxh3", $data, options: ["secret" => "как минимум 136 байт секрета"]);
echo $h, "\n";
?>
mysqli.local_infile_directory
Добавлена INI-директива mysqli.local_infile_directory, с помощью которой можно указать каталог, из которого разрешена загрузка файлов. Это имеет смысл, только если mysqli.allow_local_infile не включён, поскольку в этом случае разрешены все каталоги.
Теперь можно привязывать параметры, передав их в виде массива в mysqli_stmt::execute(). Все значения будут привязаны как строки. Разрешены только списочные массивы. Эта новая функция недоступна, если MySQLi скомпилирован с libmysqlclient.
<?php
$stmt = $mysqli->prepare('INSERT INTO users(id, name) VALUES(?,?)');
$stmt->execute([1, $username]);
?>
Добавлен mysqli_result::fetch_column() для
выборки единственного скалярного значения из набора результатов.
Новый метод принимает необязательный параметр column
,
начинающийся с 0, в виде целого числа (int), указывающий из какого столбца производить выборку.
<?php
$result = $mysqli->query('SELECT username FROM users WHERE id = 123');
echo $result->fetch_column();
?>
Добавлен атрибут PDO::MYSQL_ATTR_LOCAL_INFILE_DIRECTORY
,
который можно использовать для указания каталога, из которого могут быть загружены файлы.
Это имеет смысл только в том случае, если PDO::MYSQL_ATTR_LOCAL_INFILE
не включён,
поскольку в этом случае разрешены все каталоги.
Поддерживается новый элемент "file:"
в DSN-префиксе SQLite,
который позволяет указывать дополнительные флаги.
Он не будет работать, если включена опция open_basedir.
<?php
new PDO('sqlite:file:path/to/sqlite.db?mode=ro')
?>
Добавлены константы POSIX_RLIMIT_KQUEUES
и POSIX_RLIMIT_NPTS
.
Эти ограничения доступны только во FreeBSD.
fputcsv() теперь принимает новый аргумент eol
,
который позволяет определять настраиваемую последовательность конца строки,
значение по умолчанию остаётся прежним - "\n"
.
SplFileObject::fputcsv() теперь принимает новый аргумент
eol
, который позволяет определять настраиваемую последовательность конца строки,
значение по умолчанию остаётся прежним - "\n"
.