在PHP 7中,有两个类似的语法结构:“??”和“?:”,它们都是用于处理条件判断和返回值的运算符。尽管它们看起来相似,但它们的作用和用法有一些区别。
"?:"是三目运算符,语法格式为:$result = $test ? $test : ′ ′ ; 意思就是当test存在时(即empty($test)为false),则返回它本身,否则返回空(当然也可以返回其他,这里的空只是举个例子)。
"??"是php7新引入的语法,它相当于是isset($result[‘key’]) ? $result[‘key’] : ‘’;意思是若这个key的变量存在且值不为NULL,否则返回空。
举例说明
$a='';$b=0;$c='0';$d=array();$e=null; var_dump($a?:1); // 1 var_dump($a??1); // '' var_dump($b?:1); // 1 var_dump($b??1); // 0 var_dump($c?:1); // 1 var_dump($c??1); // "0" var_dump($d?:1); // 1 var_dump($d??1); // array() var_dump($e?:1); // 1 var_dump($e??1); // 1
可以看出
$a的值为:0,'',array(),'0'时,$a ?: 1得到的结果都是1;$a ?? 1得到的结果都是$a,效果相当于!empty($a) ? $a : 1;
$a的值为:null时,$a ?: 1与$a ?? 1得到的结果都是1,相当于 isset($a) ? $a : 1
需要注意的是,“??”运算符只能用于判断是否为 null,而“?:”运算符可以用于任何条件的判断。