PHP 8.4.1 Released!

新特性

PHP 核心

更灵活的 Heredoc 和 Nowdoc 语法

Heredoc 和 Nowdoc 语法变的更灵活。现在支持闭合标记符的缩进,并且不再强制闭合标记符的换行。

数组解构支持引用赋值

数组解构现在支持使用语法 [&$a, [$b, &$c]] = $d 进行引用赋值。list() 也支持同样的操作。

Instanceof 操作符接受字面量

instanceof 现在允许字面量作为第一个操作数,在这种情况下,结果始终为 false

一些编译错误替换为 CompileError 异常

新增 CompileError 异常,ParseError 继承该异常。现在,少量编译错误将抛出 CompileError,而不是生成致命错误。目前仅影响 TOKEN_PARSE 模式下 token_get_all() 可能抛出的编译错误,但将来可能会转换更多错误。

调用中允许尾随逗号

现在允许在函数和方法调用中使用尾随逗号。

Argon2id 支持

--with-password-argon2[=dir] 配置参数现在提供了对 password_hash()password_verify()password_get_info()password_needs_rehash() 函数的 Argon2i 和Argon2id 散列支持。可以使用 PASSWORD_ARGON2ID 常量对密码进行散列处理和验证。password_*() 函数现在对 Argon2i 和 Argon2id 的支持要求 PHP 链接的 libargon2 引用 library ≥ 20161029。

FastCGI 进程管理器

新增了自定义 FPM 日志记录的新选项:

log_limit
此全局选项可用于设置日志记录的行限制,允许记录长度超过 1024 个字符的消息而不换行。还修复了各种封装器问题。
log_buffering
此全局选项实验性允许无需额外缓冲的日志记录。
decorate_workers_output
当启用 catch_workers_output 时,此 pool 选项允许禁用 worker 输出的输出装饰器。

BC 数学函数

bcscale() 现在可以用于检索当前使用的精度。

轻量目录访问协议

LDAP 查询函数和 ldap_parse_result() 已新增对 LDAP 控件的完全支持:

多字节字符串函数

完整的大小写映射和大小写折叠支持

新增完整的大小写映射和大小写折叠。与简单的大小写映射不同,完整的大小写映射可能会更改字符串的长度。例如:

<?php
mb_strtoupper
("Straße");
// Produces STRAßE on PHP 7.2
// Produces STRASSE on PHP 7.3
?>
通过 mb_convert_case() 可以使用不同的大小写映射和折叠模式: 仅执行绝对的、与语言无关的完整大小写映射。

不区分大小写的字符串操作会使用大小写折叠

不区分大小写的字符串操作现在在比较期间会使用大小写折叠(将所有字符转换为相同的大写或小写)而不是大小写映射(将所有字符转换为其等效的大写或者小写形式)。这意味着现在更多的字符将被视为(不区分大小写)相等。

MB_CASE_TITLE 执行标题大小写转换

mb_convert_case() 现在使用 MB_CASE_TITLE 基于 Unicode 属性衍生的 Cased 和 CaseIgnorable 执行标题大小写转换。尤其是还改进了对引号和撇号的处理。

Unicode 11 支持

多字节字符串数据表已经更新到 Unicode 11。

长字符串支持

多字节字符串函数 现在正确支持超过 2GB 的字符串。

性能提升

多字节字符串扩展的性能得到了全面显著提高。最大的改进是大小写转换函数。

命名捕获支持

mb_ereg_* 函数现在支持命名捕获。像 mb_ereg() 这样的匹配函数现在将使用组号和名称返回命名捕获,类似于 PCRE:

<?php
mb_ereg
('(?<word>\w+)', '国', $matches);
// => [0 => "国", 1 => "国", "word" => "国"];
?>
此外,mb_ereg_replace() 现在支持 \k<>\k'' 符号来引用替换字符串中的命名捕获:
<?php
mb_ereg_replace
('\s*(?<word>\w+)\s*', "_\k<word>_\k'word'_", ' foo ');
// => "_foo_foo_"
?>
\k<>\k'' 也可用于编号引用,组编号大于 9 也适用。

Readline

readline_info() 中新增对 completion_append_charactercompletion_suppress_append 选项的支持。仅当 PHP 链接到 libreadline(而不是 libedit)时,这些选项才可用。

添加备注

用户贡献的备注 1 note

up
7
yoander dot valdes at yahoo dot com
5 years ago
"Trailing commas in function and method calls are now allowed" means function parameters, example:

<?php

function my1() {
echo
"xxxxxx\n";
}

function
my2() {
echo
"yyyyyy\n";
}

my1(),my2(); // PHP Parse error: syntax error

my1(,); // PHP Parse error: syntax error

my1(1,); my2(2,); // OK

?>
To Top