新特性

PHP 核心

八进制整数文字表达前缀

类似于二进制和十六进制字面量表达方式,现在八进制整数可以在表示中使用更为清晰地前缀 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 键

现在文件上传新增了额外的 full_path 键, 这包含了上传文件的完整路径(不仅仅是返回路径中的文件名部分)。 这是为了与 “upload webkitdirectory” 结合使用。

枚举

新增枚举支持。

纤程

新增功能详见 Fibers 。

First Class 可调用语法

现在可调用闭包可以使用 myFunc(...) 语法创建,与 Closure::fromCallable('myFunc') 效果一样。

注意: ... 是语法的一部分,不是省略。

交集类型

新增功能详见交集类型。

警告

交集类型不能与联合类型 一起使用。

Never 类型

新增一个新的仅仅返回类型 never。它表示函数要么 exit() ,要么抛出异常,要么不会终止。

在初始化中 new

现在可以将 new ClassName() 语句作为参数、静态变量、初始化全局常量、注解参数的默认值。现在对象可以作为 define() 的参数了。

Readonly 属性

详见 readonly 。

Final 类常量

详见 final 常量修饰符。而且,接口常量默认可覆盖。。

CURL

新增 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]);
?>

FPM

新增 openmetrics 数据格式。Prometheus 可以用它来获取 FPM 的监测指标。

动态进程管理模式下,新增 pm.max_spawn_rate 设置。该设置在动态模式下会更快生成初始数量的子进程。 默认值为 32 ,这在以前是硬编码值。

GD

如果在编译安装 libgd 时添加 AVIF 依赖包,现在通过 imagecreatefromavif() 和 imageavif() 函数可获得 AVIF 图片格式,

Hash

现在,下列函数 hash(), hash_file(),和 hash_init() 新增一个额外的 options 参数, 该参数作为特定数据传递给函数算法。

MurmurHash3

新增对 MurmurHash3 (支持流)的支持。有以下形式提供:

  • murmur3a, 32-bit hash
  • murmur3c, 128-bit hash for x86
  • murmur3f, 128-bit hash for x64

hash 初始状态可以通过键为 seed 的 options 数组传递,例如:

<?php
$h
= hash("murmur3f", $data, options: ["seed" => 42]);
echo
$h, "\n";
?>
seed 的有效值范围为 0 到系统定义的 UINT_MAX,通常是 4294967295 。

xxHash

增加 xxHash 的支持。 有以下形式提供:

  • xxh32, 32-bit hash
  • xxh64, 64-bit hash
  • xxh3, 64-bit hash
  • xxh128, 128-bit hash

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

新增 INI 设置 mysqli.local_infile_directory

新增 mysqli.local_infile_directory INI 设置,该设置可以指定允许加载文件的目录。这个设置只在禁用 mysqli.allow_local_infile 时才有意义,这种情况下允许加载任意的文件目录。

execute 可绑定参数

现在可以将参数以数组的形式传递给 mysqli_stmt::execute() 来绑定参数。所有值都以字符串的形式绑定。仅支持普通数组。当使用 libmysqlclient 编译 MySQLi 时,这个新功能不可使用。

<?php
$stmt
= $mysqli->prepare('INSERT INTO users(id, name) VALUES(?,?)');
$stmt->execute([1, $username]);
?>

新方法 mysqli_result::fetch_column()

新增 mysqli_result::fetch_column() 方法可以从结果集中获取单个标量值。 新方法接收 int 类型、从 0 开始,可选的 column 参数,用于从指定行获取数据。

<?php
$result
= $mysqli->query('SELECT username FROM users WHERE id = 123');
echo
$result->fetch_column();
?>

PDO

新增 PDO::MYSQL_ATTR_LOCAL_INFILE_DIRECTORY 常量,可用于指定可加载的文件目录。 这个设置只在禁用 PDO::MYSQL_ATTR_LOCAL_INFILE 时才有意义,这种情况下允许加载任意的文件目录。

PDO_SQLite

现在已支持 SQLite 的 "file:" DSN 语法。 可用于指定额外的标志。该功能在已设置 open_basedir 的情况下不能使用。

<?php
new PDO('sqlite:file:path/to/sqlite.db?mode=ro')
?>

POSIX

新增 POSIX_RLIMIT_KQUEUES 和 POSIX_RLIMIT_NPTS 。 这些 rlimits 只在 FreeBSD 可用。

Standard

现在 fputcsv() 新增参数 eol ,这个参数允许自定义数据的行尾值,默认值是 "\n" 。

PHP 标准库(SPL)

现在 SplFileObject::fputcsv() 新增参数 eol ,这个参数允许自定义数据的结束位置,默认值保持不变,还是 "\n" 。

+add a note

User Contributed Notes

There are no user contributed notes for this page.
To Top