Исеть встроенные условия не работает

Я использую встроенное условие, чтобы получить какое-то значение, но я не понимаю, почему оно не возвращает правильное значение. я хочу получить 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 ответа

Решение

Вы должны окружить свои тесты, используя скобки ():

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

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

Начиная с PHP 7.0, вы можете использовать оператор объединения нулей, используя ?? персонажи:

$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); 
Другие вопросы по тегам