我今天在一些 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;
这将分配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'
?>
顺便说一句,它叫做猫王操作员。