PHP 三元运算符:if/else if/else with NULL, 0 and 1
PHP ternary operators: if/else if/else with NULL, 0 and 1
我正在尝试简化这个控制块:
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
;
到目前为止,结果有所不同,我仍在努力理解。有时输出是 'Valid',有时是 'Invalid',有时是“尚未验证”
例如,对于 $isValidMobileNum = 1
我得到 Invalid
?
在嵌套的三元语句两边加上括号,使输出更可靠:
$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');
这样可以避免非法偏移警告。
这似乎不是一个正确的逻辑。
我想,我应该是这样的:
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"
为什么要对这个逻辑使用 shorthand 语法?我的意思是...显然您已经对 if else 语句的作用感到困惑。它是如何简化的?嵌套 shorthand if/else 语句……这就是所谓的简化吗?对我来说,这看起来就像是在创造一个怪物,因为您想编写更少的代码行。那不是简化,而是杂耍。
但是是的......如果你想让它工作,你应该在你的嵌套 if/else.
两边加上括号
不过我会认真考虑使用普通 if/else...如果不这样做,您的代码将变得无法维护...如果您需要向 [=16= 添加更多逻辑怎么办? ] 之后?如果有人在追踪错误时偶然发现这行代码怎么办?
我正在尝试简化这个控制块:
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
;
到目前为止,结果有所不同,我仍在努力理解。有时输出是 'Valid',有时是 'Invalid',有时是“尚未验证”
例如,对于 $isValidMobileNum = 1
我得到 Invalid
?
在嵌套的三元语句两边加上括号,使输出更可靠:
$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');
这样可以避免非法偏移警告。
这似乎不是一个正确的逻辑。
我想,我应该是这样的:
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"
为什么要对这个逻辑使用 shorthand 语法?我的意思是...显然您已经对 if else 语句的作用感到困惑。它是如何简化的?嵌套 shorthand if/else 语句……这就是所谓的简化吗?对我来说,这看起来就像是在创造一个怪物,因为您想编写更少的代码行。那不是简化,而是杂耍。
但是是的......如果你想让它工作,你应该在你的嵌套 if/else.
两边加上括号不过我会认真考虑使用普通 if/else...如果不这样做,您的代码将变得无法维护...如果您需要向 [=16= 添加更多逻辑怎么办? ] 之后?如果有人在追踪错误时偶然发现这行代码怎么办?