?: PHP 中的运算符(“猫王运算符”)

新手上路,请多包涵

我今天在一些 PHP 代码中看到了这一点:

 $items = $items ?: $this->_handle->result('next', $this->_result, $this);

我不熟悉这里使用的 ?: 运算符。它看起来像一个三元运算符,但是如果谓词为真,则评估的表达式已被省略。这是什么意思?

原文由 alpha_juno 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 815
2 个回答

如果左操作数为 ,则计算左操作数,否则计算右操作数。

在伪代码中,

 foo = bar ?: baz;

大致解决为

foo = bar ? bar : baz;

或者

if (bar) {
    foo = bar;
} else {
    foo = baz;
}

不同的是 bar 只会被评估一次。

您还可以使用 foo 进行“自检”,如您发布的代码示例所示:

 foo = foo ?: bar;

这会将 bar 分配给 foo 如果 foo 为空或错误,否则它将保持 foo 不变

更多示例:

 <?php
    var_dump(5 ?: 0); // 5
    var_dump(false ?: 0); // 0
    var_dump(null ?: 'foo'); // 'foo'
    var_dump(true ?: 123); // true
    var_dump('rock' ?: 'roll'); // 'rock'
?>

顺便说一句,它被称为 猫王运算符

猫王算子

原文由 BalusC 发布,翻译遵循 CC BY-SA 3.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 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏