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

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

我不熟悉?:操作员在这里使用。它看起来像是三元运算符,但是要评估谓词是否为真的表达式。这是什么意思?

答案

如果左操作数是,则计算左操作数真相和正确的操作数。

在伪代码中

foo = bar ?: baz;

大致解决

foo = bar ? bar : baz;

或者

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

与众不同bar仅评估一次。

您也可以使用此操作来做一个"自我检查"foo如您发布的代码示例所示:

foo = foo ?: bar;

这将分配barfoo如果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'
?>

顺便说一句,它叫做猫王操作员

Elvis operator

来自: stackoverflow.com