新特性
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 控件的完全支持:
-
ldap_add()、ldap_mod_replace()、ldap_mod_add()、ldap_mod_del()、ldap_rename()、ldap_compare()、ldap_delete()、ldap_modify_batch()、ldap_search()、ldap_list()
和 ldap_read() 新增
$controls
参数,用于发送控件到服务器。 -
ldap_parse_result() 新增输出参数
$controls
用于从服务器中获取控件。 -
ldap_get_option() 和 ldap_set_option() 修复了对
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_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" => "国"];
?>
\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_character
和 completion_suppress_append
选项的支持。仅当 PHP 链接到 libreadline(而不是 libedit)时,这些选项才可用。
用户贡献的备注 1 note
"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
?>
备份地址:http://www.lvesu.com/blog/php/migration73.new-features.php