有时候我们在根据不同条件对一个变量进行赋值时,如果只有两种情况,自然而然地就会想到使用三元表达式:
$a = $v > 5 ? 1 : 0;
但是如果分成三种情况呢?即当$v==5的时候给$a赋另外的值,那么我们可能就要使用if、elseif、else了:
if($v == 5)
$a = 0;
elseif($v > 5)
$a = 1;
else
$a = -1;
这时其实也可以使用三元表达式:
$a = $v > 5 ? 1 : ($v == 5 ? 0 : -1);
理论上,这样的结构是可以不断嵌套下去的:
$a = 条件1 ? 值1 : (条件2 ? 值2 : (条件3 ? 值3 : (条件4 ? 值4 : 值5)));
它与这样的结构的效果是一样的:
if(条件1){
$a = 值1;
}elseif(条件2){
$a = 值2;
}elseif(条件3){
$a = 值3;
}elseif(条件4){
$a = 值4;
}else{
$a = 值5;
}
当然,实际在编写代码的时候为使结构清晰是不建议使用这种三元表达式嵌套的,并且代码的执行效率也会降低,因此还是使用常规的分支结构。
例如:y=13>12?15: 6>7?8:9
我之前一度错误的认为,前面的三元表达式执行完后的结果再跟后面的三元表达式比较.. 最后得出结果8..
其实这条语句可等价于下面
if(13>12){
a=15;
}else {
if(6>7)a=8;
else a=9;
}