PHP中?:与??的区别

本文中,我们将比较和分析PHP中的两个速记条件运算符,简写三元运算符,即evlis运算符(?:)和空合并运算符(??)。

从PHP 5.3+开始,我们可以使用较短的三元运算符语法,省略三元运算符的中间部分从而实现简写。

$a ? : $b;

以上简写语法被成为evlis运算符,下面用evlis运算符,三元运算符以及常用的if else进行对比,结果相同。

//使用elvis运算符
$a ? : $b;

//使用三元运算符
$a ? $a : $b;

//使用if / else
if($a){
    return $a;
} else {
    return $b;
}

//注意:这里的$a和$b并不是指定数值,它可以是任意类型的数据

关于以上代码可以理解为,当$a条件成立如果为0或者false均被视为条件不成立,则直接返回$a的结果,不成立,则返回$b。

值得注意的一点:$a必须已经有过声明,否则代码会报错。

在PHP7中引入了null合并运算符(??),具体语法如下:

$a??$b;

$a是不是是null,如果不为null,则返回$a,否则返回$b;

下面用null合并运算符,三元运算符以及常用的if else进行对比,结果相同。

//作为if语句:
if(isset($a)){
    $a;
} else {
    $b;
}

//三元运算符:
(isset($a) ? $a : $b);

//null合并运算符
$a ?? $b;

null合并运算符要求结果必须存在,并且不为null,即使为false,条件依然成立。

下面用具体的数据列出?:与??两者之间的差别:

Expressionecho ($x ?: 'hello')echo ($x ?? 'hello')
$x = "";'hello'""
$x = null;'hello''hello'
$x;'hello'
(and Notice: Undefined variable: x)
'hello'
$x = [];'hello'[]
$x = ['a', 'b'];['a', 'b']['a', 'b']
$x = false;'hello'false
$x = true;truetrue
$x = 1;11
$x = 0;'hello'0
$x = -1;-1-1
$x = '1';'1''1'
$x = '0';'hello''0'
$x = '-1';'-1''-1'
$x = 'random';'random''random'
$x = new stdClass;object(stdClass)object(stdClass)

 

  • 7
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值