$a = $a ? $a : 1;//第一种 $a = $a ? : 1;//第二种
第二种写法从 PHP 5.3 引入,表示若 $a 返回值为真时,取 $a 的返回值。 此外,在 PHP7 中引入了??运算符
$a = $a ?? 1;
该表达式与第二种写法类似,可以达到相同的效果。但??运算符是以判断 $a 变量是否存在于上下文环境中作为条件,而三元运算符不具备这种判断。所以??运算符可 用于判断 $a 变量不存在的情况(也可用于数组),而使用三元运算符判断一个未定义的变量,PHP 会抛出异常。也正是因为这样,用??判断一个赋值为 0 的变量的时候结果是不一样的。
$a=0; $c=1; $b=$a??$c; echo 'a:'.$a.',b:'.$b.',c:'.$c; //a:0,b:0,c:1 $a=0; $c=1; $b=$a?$a:$c; echo 'a:'.$a.',b:'.$b.',c:'.$c; //a:0,b:1,c:1