Isset内联条件不起作用

时间:2018-01-25 11:18:55

标签: php conditional isset

我使用内联条件获取一些值,但我不明白为什么它不会返回好的值。 我想获得false值,但它返回test。我做错了什么?我搜索了一些问题,但我没有找到为什么我的脚本不起作用。感谢。

这是剧本,

$val1 = null;
$val2 = false;
$val3 = 0;
$val4 = "test";

$newValue = isset($val1) ? $val1 : isset($val2) ? $val2 : isset($val3) ? $val3 : isset($val4) ? $val4 : -1;
var_dump($newValue); // print test

2 个答案:

答案 0 :(得分:2)

您必须使用大括号()包围您的测试:

$newValue = isset($val1) ? $val1 : (
                isset($val2) ? $val2 : (
                    isset($val3) ? $val3 : (
                        isset($val4) ? $val4 :
                            -1
                    )
                )
            ) ;

var_dump($newValue) ; // Outputs : bool(false)

自PHP 7.0起,您可以使用??字符null coalescing operator使用

$newValue = $val1 ?? $val2 ?? $val3 ?? $val4 ?? -1 ;
var_dump($newValue) ; // Outputs : bool(false)

答案 1 :(得分:0)

虽然不是一个复杂的代码,但只想添加:

使用三元运算符时,即使您习惯使用它们,也要避免嵌套或堆叠操作,因为这会导致代码非常混乱和结果不直观。在复杂情况下使用if语句仍然是最好的。(www.sitepoint.com)

if (isset($val1)) {
    $newValue = $val1;
}elseif (isset($val2)) {
    $newValue = $val2;
}elseif (isset($val3)) {
    $newValue = $val3;
}elseif (isset($val4)) {
    $newValue = $val4;
}
var_dump($newValue);