Heredoc 和 Nowdoc 语法变的更灵活。现在支持闭合标记符的缩进,并且不再强制闭合标记符的换行。
数组解构现在支持使用语法 [&$a, [$b, &$c]] = $d
进行引用赋值。list() 也支持同样的操作。
instanceof
现在允许字面量作为第一个操作数,在这种情况下,结果始终为 false
。
新增 CompileError 异常,ParseError 继承该异常。现在,少量编译错误将抛出
CompileError,而不是生成致命错误。目前仅影响 TOKEN_PARSE
模式下
token_get_all() 可能抛出的编译错误,但将来可能会转换更多错误。
现在允许在函数和方法调用中使用尾随逗号。
--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。
新增了自定义 FPM 日志记录的新选项:
log_limit
log_buffering
decorate_workers_output
catch_workers_output
时,此 pool 选项允许禁用 worker 输出的输出装饰器。
bcscale() 现在可以用于检索当前使用的精度。
LDAP 查询函数和 ldap_parse_result() 已新增对 LDAP 控件的完全支持:
$controls
参数,用于发送控件到服务器。
$controls
用于从服务器中获取控件。
LDAP_OPT_SERVER_CONTROLS
和 LDAP_OPT_CLIENT_CONTROLS
的支持。
新增完整的大小写映射和大小写折叠。与简单的大小写映射不同,完整的大小写映射可能会更改字符串的长度。例如:
<?php
mb_strtoupper("Straße");
// Produces STRAßE on PHP 7.2
// Produces STRASSE on PHP 7.3
?>
不区分大小写的字符串操作现在在比较期间会使用大小写折叠(将所有字符转换为相同的大写或小写)而不是大小写映射(将所有字符转换为其等效的大写或者小写形式)。这意味着现在更多的字符将被视为(不区分大小写)相等。
mb_convert_case() 现在使用 MB_CASE_TITLE
基于 Unicode 属性衍生的
Cased 和 CaseIgnorable 执行标题大小写转换。尤其是还改进了对引号和撇号的处理。
多字节字符串数据表已经更新到 Unicode 11。
多字节字符串函数 现在正确支持超过 2GB 的字符串。
多字节字符串扩展的性能得到了全面显著提高。最大的改进是大小写转换函数。
mb_ereg_*
函数现在支持命名捕获。像 mb_ereg() 这样的匹配函数现在将使用组号和名称返回命名捕获,类似于 PCRE:
<?php
mb_ereg('(?<word>\w+)', '国', $matches);
// => [0 => "国", 1 => "国", "word" => "国"];
?>
\k<>
和 \k''
符号来引用替换字符串中的命名捕获:
<?php
mb_ereg_replace('\s*(?<word>\w+)\s*', "_\k<word>_\k'word'_", ' foo ');
// => "_foo_foo_"
?>
\k<>
和 \k''
也可用于编号引用,组编号大于 9 也适用。
readline_info() 中新增对 completion_append_character
和 completion_suppress_append
选项的支持。仅当 PHP 链接到 libreadline(而不是 libedit)时,这些选项才可用。