Isset 内联条件不起作用

Isset inline conditions does not work

我正在使用内联条件来获取一些值,但我不明白为什么它没有 return 好的值。 我想获得 false 值,但它是 return 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

你必须用大括号括起你的测试 () :

$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)

虽然不是很复杂的代码只是想补充一下:

在使用三元运算符时,请避免嵌套或堆叠您的操作,即使您习惯使用它们也是如此,因为这会导致非常混乱的代码和不直观的结果。对于复杂的情况,最好还是使用 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);