注意:?? 必须 php7+ 版本才可以使用
举例:
<?php $a = 1; $b = 2; $c = 3;
$d = $a ?: $b; 等同于 $d = $a ? $a : $b; //如果 $a 存在,就返回 $a,否则返回 $b;
$d = $a ?? $b; 等同于 $d = isset($a) ? $a : $b; //如果 $a 变量已经设置,就返回 $a,否则就返回 $b;
关键是在 $a 的判断有区别,三元运算符判断的是 $a 是否有值 = !empty()
合并运算符是判断 $a 是否设置了变量 = isset()
大部分情况,2个运算符结果会一样。
此情况输出一致:
<?php $a = 1; $b = 2; $c = 3; $d = $a ? $a : $b; var_export($d); echo PHP_EOL; $d = $a ?? $b; var_export($d); <<<EDO 1 1 EDO;
所以以下情况,结果就不一样:
<?php $a = 0; $b = 2; $c = 3; $d = $a ? $a : $b; var_export($d); echo PHP_EOL; $d = $a ?? $b; var_export($d); <<<EDO 2 0 EDO;