类似于二进制和十六进制字面量表达方式,现在八进制整数可以在表示中使用更为清晰地前缀 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
键,这包含了上传文件的完整路径(不仅仅是返回路径中的文件名部分)。这是为了与 “upload
webkitdirectory” 结合使用。
新增枚举支持。
新增功能详见 Fibers。
现在可调用闭包可以使用 myFunc(...)
语法创建,与 Closure::fromCallable('myFunc')
效果一样。
注意:
...
是语法的一部分,不是省略。
新增新的唯一返回类型 never。它表示函数要么 exit() ,要么抛出异常,要么不会终止。
详见 readonly。
详见 final 常量修饰符。而且,接口常量默认可覆盖。
新增 CURLOPT_DOH_URL
选项。
libcurl 版本 >= 7.71.0 时增加 blob 证书选项:
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 类,它能够直接将字符串(不是文件)作为文件上传。
<?php
$file = new CURLStringFile($data, 'filename.txt', 'text/plain');
curl_setopt($curl, CURLOPT_POSTFIELDS, ['file' => $file]);
?>
新增 openmetrics 数据格式。Prometheus 可以用它来获取 FPM 的监测指标。
动态进程管理模式下,新增 pm.max_spawn_rate
设置。该设置在动态模式下会更快生成初始数量的子进程。默认值为
32
,这在以前是硬编码值。
如果在编译安装 libgd 时添加 AVIF 依赖包,现在通过 imagecreatefromavif() 和 imageavif() 函数可获得 AVIF 图片格式,
现在,下列函数 hash()、hash_file()
和 hash_init() 新增一个额外的 options
参数,该参数作为特定数据传递给函数算法。
新增对 MurmurHash3
(支持流)的支持。有以下形式提供:
hash 初始状态可以通过键为 seed
的 options
数组传递,例如:
<?php
$h = hash("murmur3f", $data, options: ["seed" => 42]);
echo $h, "\n";
?>
0
到系统定义的 UINT_MAX
,通常是 4294967295
。
增加 xxHash
的支持。有以下形式提供:
hash 初始状态可以通过键为 seed
的 options
数组传递,例如:
<?php
$h = hash("xxh3", $data, options: ["seed" => 42]);
echo $h, "\n";
?>
secret
的 options
数组传递,例如:
<?php
$h = hash("xxh3", $data, options: ["secret" => "at least 136 bytes long secret here"]);
echo $h, "\n";
?>
mysqli.local_infile_directory
新增 mysqli.local_infile_directory INI 设置,该设置可以指定允许加载文件的目录。这个设置只在禁用 mysqli.allow_local_infile 时才有意义,这种情况下允许加载任意的文件目录。
现在可以将参数以数组的形式传递给 mysqli_stmt::execute() 来绑定参数。所有值都以字符串的形式绑定。仅支持普通数组。当使用 libmysqlclient 编译 MySQLi 时,这个新功能不可使用。
<?php
$stmt = $mysqli->prepare('INSERT INTO users(id, name) VALUES(?,?)');
$stmt->execute([1, $username]);
?>
新增 mysqli_result::fetch_column() 方法可以从结果集中获取单个标量值。新方法接收
int 类型、从 0 开始,可选的 column
参数,用于从指定行获取数据。
<?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
时才有意义,这种情况下允许加载任意的文件目录。
现在已支持 SQLite 的 "file:"
DSN
语法。可用于指定额外的标志。该功能在已设置 open_basedir 的情况下不能使用。
<?php
new PDO('sqlite:file:path/to/sqlite.db?mode=ro')
?>
新增 POSIX_RLIMIT_KQUEUES
和 POSIX_RLIMIT_NPTS
。这些
rlimits 只在 FreeBSD 可用。
现在 fputcsv() 新增参数
eol
,这个参数允许自定义数据的行尾值,默认值是 "\n"
。
现在 SplFileObject::fputcsv() 新增参数
eol
,这个参数允许自定义数据的结束位置,默认值保持不变,还是 "\n"
。