新特性

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 键,它包含上传文件的完整路径(而不是仅限文件名)。这旨在与“upload webkitdirectory”一起使用。

枚举

添加了对 枚举 的支持。

纤程

添加了对 纤程 的支持。

一等函数语法

可调用函数的闭包现在可以使用 语法 myFunc(...) 创建,它与 Closure::fromCallable('myFunc') 相同。

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

交集类型

添加了对 交集类型 的支持。

警告

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

Never 类型

添加了一种新的仅返回类型 never。这表示函数要么 exit(),要么抛出异常,要么不终止。

new 在初始化器中

现在可以在参数的默认值、静态变量、全局常量初始化器以及属性参数中使用 new ClassName() 表达式。现在也可以将对象传递给 define()

只读属性

添加了对 只读 的支持。

最终类常量

添加了对 类常量的 final 修饰符 的支持。此外,接口常量默认情况下变为可覆盖。

CURL

添加了 CURLOPT_DOH_URL 选项。

在 libcurl >= 7.71.0 时添加了 blob 证书选项

添加了 CURLStringFile,它可以用来从 string 而不是文件发布文件

<?php
$file
= new CURLStringFile($data, 'filename.txt', 'text/plain');
curl_setopt($curl, CURLOPT_POSTFIELDS, ['file' => $file]);
?>

FPM

添加了 openmetrics 状态格式。它可以被 Prometheus 用来获取 FPM 指标。

为动态进程管理器添加了名为 pm.max_spawn_rate 的新池选项。当选择动态 pm 时,它允许以更快的速度启动一定数量的子进程。默认值为 32,这是之前的硬编码值。

GD

如果 libgd 已使用 Avif 支持构建,则现在可以通过 imagecreatefromavif()imageavif() 使用 Avif 支持。

哈希

以下函数 hash()hash_file()hash_init() 现在支持一个额外的可选 options 参数,它可以用来传递特定于算法的数据。

MurmurHash3

添加了对 MurmurHash3 的支持,并支持流式处理。实现了以下变体

  • murmur3a,32 位哈希
  • murmur3c,x86 的 128 位哈希
  • murmur3f,x64 的 128 位哈希

可以通过 options 数组中的 seed 键传递初始哈希状态,例如

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

xxHash

添加了对 xxHash 的支持。实现了以下变体

  • xxh32,32 位哈希
  • xxh64,64 位哈希
  • xxh3,64 位哈希
  • xxh128,128 位哈希

可以通过 options 数组中的 seed 键传递初始哈希状态,例如

<?php
$h
= hash("xxh3", $data, options: ["seed" => 42]);
echo
$h, "\n";
?>
还可以通过在 options 数组中传递 secret 键来支持秘密使用
<?php
$h
= hash("xxh3", $data, options: ["secret" => "至少 136 字节长的秘密在这里"]);
echo
$h, "\n";
?>
自定义密钥的质量对于生成哈希的质量至关重要。强烈建议密钥使用最佳熵。

MySQLi

新的 INI 指令 mysqli.local_infile_directory

添加了 mysqli.local_infile_directory INI 指令,它可以用来指定允许从中加载文件的目录。只有在 mysqli.allow_local_infile 未启用时才有意义,因为在这种情况下所有目录都是允许的。

在 execute 中绑定参数

现在可以将参数作为数组传递给 mysqli_stmt::execute() 来绑定参数。所有值都将绑定为字符串。只允许列表数组。当 MySQLi 使用 libmysqlclient 编译时,此新功能不可用。

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

新方法 mysqli_result::fetch_column()

mysqli_result::fetch_column() 已被添加,允许从结果集中获取单个标量值。新方法接受一个可选的基于 0 的 column 参数,类型为 int,指定要从中获取的列。

<?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_KQUEUESPOSIX_RLIMIT_NPTS。这些 rlimit 仅在 FreeBSD 上可用。

标准

fputcsv() 现在接受一个新的 eol 参数,允许定义自定义行结束符序列,默认值保持不变,为 "\n"

SPL

SplFileObject::fputcsv() 现在接受一个新的 eol 参数,允许定义自定义行结束符序列,默认值保持不变,为 "\n"

添加注释

用户贡献的注释

此页面没有用户贡献的注释。
To Top