PHP Conference Japan 2024

新特性

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()

只读属性

已添加对readonly的支持。

最终类常量

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

CURL

添加了CURLOPT_DOH_URL选项。

当 libcurl >= 7.71.0 时添加了 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的动态进程管理器添加了新的池选项。当选择动态 pm 时,它允许以更快的速度启动一定数量的子进程。默认值为32,这是之前硬编码的值。

GD

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

Hash

以下函数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