PHP7.3新特性
Posted 小韩说课
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PHP7.3新特性相关的知识,希望对你有一定的参考价值。
转眼php7.3.0已经正式发布了两周多了,找了时间测试了下新语法。总的来说没有革命性功能的增加,主要是语法上灵活性。同时废弃掉了一些无用过时的功能。
总结的新语法大家参考下。
1 发布时间
06 Dec 2018
官网PHP7.3新特性
2 更灵活的 `Heredoc` 和 `Nowdoc` 语法
结束标记不再需要独立一行或紧跟分号了。同时结束标记也可以使用缩进,使用缩进时doc内容的每行都会跳过相应的缩进。
$data = ["元素", <<<STR
Doc Content
The new line
STR, 42,];
var_dump($data);
array(3) {
[0]=>
string(6) "元素"
[1]=>
string(25) "Doc Content
The new line"
[2]=>
int(42)
}
以上语法中,Heredoc 作为一个数组元素出现,同时结束标记没有独立在一行,还有缩进。注意定义的字符串内容,两行的缩进都被剥除了。
3 数组析构支持引用赋值
演示:
$v = [10, 20];
[$a, &$b] = $v;
$b += 10;
var_dump($v, $a, $b);
array(2) {
[0]=>
int(10)
[1]=>
&int(30)
}
int(10)
int(30)
在为 b 和 $v[1] 元素保持引用关系。
4 list结构支持引用解析。
演示:
$v = [10, 20];
list($c, &$d) = $v;
$d += 10;
var_dump($v, $c, $d);
array(2) {
[0]=>
int(10)
[1]=>
&int(30)
}
int(10)
int(30)
5 instanceof 运算符支持字面量语法
instanceof 的第一个运算数支持字面量,非对象型字面量检测的结果为 false。
var_dump("literal" instanceof stdClass);
var_dump(42 instanceof stdClass);
var_dump(new stdClass() instanceof stdClass);
bool(false)
bool(false)
bool(true)
6 支持调用时参数的尾随逗号
调用函数时,参数列表后允许跟随一个逗号。
function methodName($p1, $p2)
{
// some statmenet
var_dump($p1, $p2);
}
methodName(10, 20, );
int(10)
int(20)
调用函数时,第二个(最后一个)参数后,增加了一个逗号是允许的。但定义是不行。
7 BC 数学函数
bcscale()
函数支持获取当前BC函数所使用的 scale。
bcscale(3);
var_dump(bcscale());
int(3)
8 LDAP 全支持
LDAP:Lightweight Directory Access Protocol,轻量目录访问协议完全支持。
9 多字节字符串函数更新
全功能的 Case-Mapping 和 Case-Folding 支持
大小写不敏感字符串运算符使用 Case-Folding
支持 Unicode 11
长字符串支持
命名捕获支持
10 FastCGI 进程管理
增加了如下的选项来配置FPM的Logging:(暂未翻译)
log_limit
log_buffering
decorate_workers_output
11 Argon2id 算法支持
--with-password-argon2[=dir] 配置参数后。提供了对Password_*()函数中的 Argon2i 和 Argon2id 散列的支持。使用 PASSWORD_ARGON2ID 常量进行指定算法。PHP需要 libargon2 库版本要大于(等于)20161029。
12 CompileError 异常替代了一些编译错误
新的 CompileError 异常被添加,ParseError继承了这个异常。目前只会影响 Token_GET_All() 在 Token_parse 模式下可能引发的编译错误。
13 性能提升
据说 PHP7.3 比 PHP 7.0 快 22%。未测试,有机会压测一下。
14 废弃大小写不敏感的常量
大小写不敏感的常量声明现已被废弃。将 TRUE 作为第三个参数传递给 define() 会导致一个废弃警告。大小写不敏感的使用(在读取时使用一个与声明时不同的大小写方式)也已被废弃。
15 废弃在字符串中搜索非字符串内容
将一个非字符串内容传递给字符串搜索函数。 在将来所有待搜索的内容都将被视为字符串,而不是 ASCII 编码值。如果需要依赖这个特性,你应该 要么显示地进行类型转换(转为字符串),或者显示地调用 chr()。 以下是受到影响的方法:
16 新常量
http://php.net/manual/zh/migration73.constants.php
17 新函数
http://php.net/manual/zh/migration73.new-functions.php
以上是关于PHP7.3新特性的主要内容,如果未能解决你的问题,请参考以下文章