在 javascript 中,如果第一个操作失败,我们可以使用 ||
执行第二个操作,例如:
function getObject(id_or_object) {
var obj = document.getElementById(id_or_object) || id_or_object;
return obj;
}
我们如何在 PHP 中做到这一点?
如果我们不能,我可以发誓我在 PHP 中看到过这样使用的 ||
。什么意思?
我想做的事:
function fix_item($item) {
$item['armor'] = $item['armor'] || 0;
return $item;
}
但这不起作用,所以我正在使用
function fix_item($item) {
if (!isset($item['armor'])) $item['armor'] = 0;
return $item;
}
,但我不喜欢第二种方法。有什么想法吗?
最佳答案
您可以使用 ||
(OR
) 进行真/假比较,但是(这是已知的(有争议的)设计错误之一)在 PHP 的设计中:short -circuit 不返回操作数的值(正如您在 javascript 逻辑示例中所做的那样),而是返回 bool 结果。
这意味着:
$item['盔甲'] = $item['盔甲'] || 0;
无法按预期工作(就像在 javascript 中一样)。
相反,它会将 $item['armor']
设置为 bool 值 true/false(取决于结果:$item['armor'] || 0
)。
但是,可以以类似于在 javascript 中使用它的方式使用“惰性求值”:
isset($item['盔甲']) || $item['盔甲'] = 0;
(添加了 isset
以防止出现 Undefined variable
错误)。
它仍然清楚地描述了您的意图,您不需要使用 !
反转 bool isset
结果(这对于 if
是必要的和 &&
(AND
))。
或者,也可以这样做:
$item['armor'] = $item['armor'] OR $item['armor'] = 0;
(注意这会给出一个E_NOTICE
)< br/>
(我觉得可读性不太好),
或三元:
$item['armor'] = isset($item['armor']) ? $item['盔甲'] : 0;
(具有“更好”/“更常见”的可读性,但增加了代码大小)。
对于 PHP7 及更高版本,请参阅 Tom DDD的答案。
关于javascript - PHP:这样做 ||那(像javascript),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30519395/