php7中 ?? 和三元运算符 ? : 的区别

16-12-15 10:20 字数 316 阅读 12713 已编辑

php7新增一个运算符??,不知道大家平时是在什么时候用它,但是我一直用它代替以前的三元运算符? :,今天偶然发现,它和三元运算符是不一样的

$a = 0;    

$b = $a > 0  ? $a : 1;    

$c = $a ? $a : 2;    

$d = $a ?: 3;    

$f = $a ?? 3;    

var_dump($b); // int 1    
var_dump($c); // int 2    
var_dump($d); // int 3    
var_dump($f); // int 0    
var_dump(isset($a)); // boolean true    

> 从上面的结果可以看出 $a = $var ?? $temp 的意思是 $a = isset($var) ? $var : $temp

所以想用??判断一个赋值为0的变量的时候要小心了,结果可能和想象中的不一样

2人点赞>
关注 收藏 改进 举报
4 条评论
排序方式 时间 投票
Up骚年

修正了本文不恰当的说明,多谢@veike 的提醒。

veike

题主,你这个写的有点误人子弟啊。
php7中的三元运算 ?? 等同于 isset($var) ? $var : 返回值; 如果是满足isset条件,则返回$var .$var 可以是字符串、数组、布尔值等。 而且这个帖子还百度排名第一。我擦。
不是isset($condition) ? true : false;这种形式好吗。 而且怎么会有isset去判断bool值呢。

Up骚年
@veike 是的,多谢指正。确实不严谨。**?? $temp** 的意思是 isset($var) ? $var : $temp。 这篇文章主要是比较 ** ?? ** 和 ** ? : ** 的区别,这个从例子中能明白我的初衷。
草芥
$a=0;  
$c=1;  
$b=$a??$c;  
// $a=$a=0  
//==========  
$a=0;  
$c=1;  
$b=$a?$a:$c;  
// $a=$c=1  
请登录后发表评论