今日、PHP コードでこれを見ました:
$items = $items ?: $this->_handle->result('next', $this->_result, $this);
ここで使用されている演算子がよくわかりません?:
。三項演算子のように見えますが、述語が真であるかどうかを評価する式が省略されています。これはどういう意味ですか?
ベストアンサー1
左辺のオペランドが真実の、それ以外の場合は右オペランド。
擬似コードでは、
foo = bar ?: baz;
大体次のように解決される
foo = bar ? bar : baz;
または
if (bar) {
foo = bar;
} else {
foo = baz;
}
違いはbar
一度だけ評価されます。
foo
これを使用して、投稿したコード例に示されているように「セルフチェック」を行うこともできます。
foo = foo ?: bar;
これは、null または false の場合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'
var_dump('' ?: 'roll'); // 'roll'
var_dump('0' ?: 'roll'); // 'roll'
var_dump('42' ?: 'roll'); // '42'
?>
ちなみに、これはエルヴィスオペレーター。