我正在尝试简化此控制块:
if (!isset($mobileNumberHF['IS_VALID']) && $mobileNumberHF['IS_VALID'] != 0) {
echo '<strong class="text-warning">Sin validar</strong>';
} else if ($mobileNumberHF['IS_VALID'] == 0) {
echo '<strong class="text-danger">Inválido</strong>';
} else {
echo '<strong class="text-success">Validado</strong>';
}
像这样:
$isValidMobileNum = $mobileNumHF['IS_VALID'];
$mobileNumStatusLabel = ($isValidMobileNum == 1) ? 'Valid' : (!isset($isValidMobileNum)) ? 'Hasn't been validated' : 'Invalid';
测试方案是$isValidMobileNum
等于NULL, 0 or 1
;
到目前为止,结果的变化方式我还在努力理解。有时输出为“有效”,有时为“无效”,有时“未经验证”
例如,对于$isValidMobileNum = 1
我正在Invalid
?
答案 0 :(得分:1)
它似乎不是一个正确的逻辑。
我想,我应该如下:
if (isset($mobileNumberHF['IS_VALID'])) {
echo ($mobileNumberHF['IS_VALID'] != 0)? '<strong class="text-success">Validado</strong>' : '<strong class="text-danger">Inválido</strong>';
} else {
echo '<strong class="text-warning">Sin validar</strong>';
}
至于你的三元运算符:你在最后一个操作数中放错了括号。另外'Hasn't
字还没有单引号。
$isValidMobileNum = 1;
$mobileNumStatusLabel = ($isValidMobileNum == 1) ? 'Valid' : (!isset($isValidMobileNum) ? 'Hasn\'t been validated' : 'Invalid');
echo $mobileNumStatusLabel; // "Valid"
答案 1 :(得分:0)
将括号放在嵌套的三元语句周围,以使输出更可靠:
$isValidMobileNum = $mobileNumHF['IS_VALID'];
$mobileNumStatusLabel = ($isValidMobileNum == 1) ? 'Valid' : ( (!isset($isValidMobileNum)) ? 'Hasn't been validated' : 'Invalid' );
这是我个人会使用的另一种选择(没有理由为什么它更好)
$mobilePhone = isset($mobileNumHF['IS_VALID']) ? $mobileNumHF['IS_VALID'] : -1;
$mobileNumStatusLabel = $mobilePhone ? 'Valid' : ($mobilePhone == 0 ? 'Invalid' : 'Hasn\'t been validated');
这种方式可以避免非法的偏移警告。
答案 2 :(得分:0)
为什么要对此逻辑使用速记语法?我的意思是......显然你已经对你的if else声明在做什么感到困惑。它是如何简化的?嵌套if / else语句的简写...这称为简化这些日子?对我而言,看起来你正在创建一个怪物,因为你想要编写更少的代码行。这不是简化,它的杂耍。
但是是......如果你想让它工作,你应该在你的嵌套if / else周围添加括号。
我会认真考虑使用普通的if / else但是......如果你不这样做,你的代码将无法维护......如果你需要在if / else之后添加更多逻辑怎么办?如果有人在追踪错误时遇到这行代码会怎么样?