PHP7.3.0正式发布两周多,新语法测试总结及数组析构演示
转眼间,PHP7.3.0正式发布已过去两周多,找时间对新语法进行了测试。总体而言,没有增加具有革命性的功能,主要是语法方面更具灵活性。同时,一些无用过时的功能被废弃了。

[id_1375617941]
1 发布时间
06 Dec 2018
官网PHP7.3新特性
更具灵活性的 `Heredoc` 语法,以及 `Nowdoc` 语法 。
请你提供一下具体需要改写的句子内容,以便我按照要求进行改写。
$data = [[id_1802039136], << [id_550363065]
The new line
[id_428911463]
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进行解析时,采用了引用传递的方式,这时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即轻量目录访问协议,它得到了完全支持。
9 多字节字符串函数更新10 FastCGI 进程管理
增加了如下的选项来配置FPM的Logging:(暂未翻译)
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 新常量
17 新函数