在PHP7中引入了null合并运算符(??),php8里面延续了该语法,具体如下:
$a??$b
1. $a 为未定义的情况
<?php
//$a=0;
$b=1;
$c=$a??$b;
var_dump($c);
int(1)
➜ data vim quote.php
➜ data php -v
PHP 8.0.11 (cli) (built: Oct 26 2021 16:09:14) ( NTS DEBUG )
Copyright (c) The PHP Group
Zend Engine v4.0.11, Copyright (c) Zend Technologies
2.在$a已定义的情况下 $a??$b 的结果
a.$a=null的时候等于??后面的值
<?php
$a=null;
$b=1;
$c=$a??$b;
var_dump($c);
output:
int(1)
b.$a=0的时候等于$a
<?php
$a=0;
$b=1;
$c=$a??$b;
var_dump($c);
output:
int(0)
c.$a=1的时候等于$a
<?php
$a=2;
$b=1;
$c=$a??$b;
var_dump($c);
output:
int(2)
d.$a=""的时候等于$a
<?php
$a="";
$b=1;
$c=$a??$b;
var_dump($c);
output:
string(0) ""
我们习惯性的把php的empty()的判断结论套用到??上(0、"",null 都是空值),所以才会有这么多坑,作为一个语言的特性延展,??并不是一个很好的表达式,反而会让老鸟们造新坑,如果不清楚其特性或者没有做边界测试,建议不要为了偷懒直接使用该语法。