php的三元运算符

三元运算,即第一个表达式作为判断条件,在后面两个表达式中选择一个执行。若判断成立,则执行第二个表达式,否则执行第三个表达式。查资料时候,看到好多网友都说的不太全面或者不清不楚,所以这里整理并简单记录一波

整理如下

1. (expr1)?(expr2):(expr3);

=> 表达式1 ? 表达式2 : 表达式3

=> 如果条件“expr1”成立,则返回“expr2”,否则返回“expr3”。

$number = 100;
$msg = $number > 0 ? '大于0' : '不大于0';
echo $msg;//大于0

2. (expr1)?:(expr2);

=> 这个是php5.3开始才有的功能

=> 如果条件“expr1”成立,则返回“expr1”,否则“expr2”。

<?php
$number = 100;
$msg = $number ?: '不大于0';
echo $msg;//100

3. (expr1)??(expr2);

=> 这个是php7开始才有的功能

=> 又叫空合并运算符,相当于 isset(expr1) ? expr1 : expr2;

=> 如果条件“isset(expr1)”成立,则执行语句“expr1”,否则执行“expr2”。

=> 链式:(expr1)?? (expr2) ?? (expr3);

特别注意第3点

它只能判断是否为null,而0/false/空数组都认为有值的!

<?php
// 一般形式
$msg1 = $number ?? '未设置该变量';
echo $msg1;//'未设置该变量'

$number = 100;
$msg2 = $number ?? '未设置该变量';
echo $msg2;//100

// 链式
$msg3 = $number1 ?? $number2 ?? '未设置该变量';
echo $msg3;//未设置该变量 //没有赋值都是null,所以返回'未设置该变量'

$number1 = 100;//即使是0/false/空数组都认为有值的!
$msg3 = $number1 ?? $number2 ?? '未设置该变量';
echo $msg3;//100 //执行到第一步就得到结果,所以返回100