我今天在一些 PHP 代码中看到了这一点:
$items = $items ?: $this->_handle->result('next', $this->_result, $this);
我不熟悉这里使用的 ?:
运算符。它看起来像一个三元运算符,但是如果谓词为真,则评估的表达式已被省略。这是什么意思?
原文由 alpha_juno 发布,翻译遵循 CC BY-SA 4.0 许可协议
我今天在一些 PHP 代码中看到了这一点:
$items = $items ?: $this->_handle->result('next', $this->_result, $this);
我不熟悉这里使用的 ?:
运算符。它看起来像一个三元运算符,但是如果谓词为真,则评估的表达式已被省略。这是什么意思?
原文由 alpha_juno 发布,翻译遵循 CC BY-SA 4.0 许可协议
?:
是猫王算子。这是一个 二元运算符,它执行以下操作:
将 ?:
的左侧值强制为布尔值并检查它是否为 true
。如果 true
它将返回左侧的表达式,如果为 false 它将返回右侧的表达式。
var_dump(0 ?: "Expression not true"); // expression returns: Expression not true
var_dump("" ?: "Expression not true"); // expression returns: Expression not true
var_dump("hi" ?: "Expression not true"); // expression returns string hi
var_dump(null ?: "Expression not true"); // expression returns: Expression not true
var_dump(56 ?: "Expression not true"); // expression return int 56
Elvis 运算符基本上是三元运算符特定情况的简写语法,即:
$testedVar ? $testedVar : $otherVar;
Elvis 运算符将通过以下方式使语法更加简洁:
$testedVar ?: $otherVar;
原文由 Willem van der Veen 发布,翻译遵循 CC BY-SA 4.0 许可协议
1 回答4.1k 阅读✓ 已解决
3 回答1.8k 阅读✓ 已解决
2 回答2.2k 阅读✓ 已解决
1 回答1.4k 阅读✓ 已解决
2 回答2.2k 阅读
1 回答579 阅读✓ 已解决
789 阅读
如果左操作数为 真,则计算左操作数,否则计算右操作数。
在伪代码中,
大致解决为
或者
不同的是
bar
只会被评估一次。您还可以使用
foo
进行“自检”,如您发布的代码示例所示:这会将
bar
分配给foo
如果foo
为空或错误,否则它将保持foo
不变更多示例:
顺便说一句,它被称为 猫王运算符。