javascript - PHP:这样做 ||那(像javascript)

标签 javascript php short shorthand

在 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/

相关文章:

php - 尝试使用 PHP header ("Location: ") 函数进行重定向

c++ - 将 char[2] 转换为 unsigned short 时出错?

java - 与 JQueryMobile 中基于 REST 的 JSON WebService 的连接

javascript - 如何对分割更严格?

php - 使用 apache 配置为每个站点指定 PHP 包含目录

php - Backbone.js 销毁问题

Facebook 分享者拒绝 goo.gl 链接

c++ - unsigned short int 和 unsigned int 或 unsigned short 之间有什么区别?

javascript - 延迟处理悬停事件

javascript - 更改链接颜色