?: PHP 中的运算符(“Elvis 运算符”)
2022-08-30 06:01:35
我今天在一些PHP代码中看到了这个:
$items = $items ?: $this->_handle->result('next', $this->_result, $this);
我不熟悉这里使用的运算符。它看起来像一个三元运算符,但如果谓词为 true,则要计算的表达式已被省略。这是什么意思??:
我今天在一些PHP代码中看到了这个:
$items = $items ?: $this->_handle->result('next', $this->_result, $this);
我不熟悉这里使用的运算符。它看起来像一个三元运算符,但如果谓词为 true,则要计算的表达式已被省略。这是什么意思??:
如果左操作数是真实的,则它向左操作数求值,否则向右操作数求值。
在伪代码中,
foo = bar ?: baz;
大致解析为
foo = bar ? bar : baz;
或
if (bar) {
foo = bar;
} else {
foo = baz;
}
差异只会评估一次。bar
您还可以使用它来执行“自检”,如您发布的代码示例中所示:foo
foo = foo ?: bar;
这将分配给 if 为 null 或 falsey,否则它将保持不变。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'
?>
顺便说一句,它被称为猫王操作员。