今日、いくつかのPHPコードでこれを見ました:
$items = $items ?: $this->_handle->result('next', $this->_result, $this);
?:
ここで使用されている演算子に慣れていません。三項演算子のように見えますが、述語が真の場合に評価される式が省略されています。どういう意味ですか?
今日、いくつかの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;
これは 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'
?>
ちなみに、エルヴィス演算子と呼ばれるものです。
ドキュメントを参照してください:
PHP 5.3 以降、三項演算子の中間部分を省略することができます。Expressionは、評価された場合は を
expr1 ?: expr3
返し、そうでない場合は返します。expr1
expr1
TRUE
expr3
はい、これは PHP 5.3 の新機能です。TRUE と評価された場合はテスト式の値を返し、FALSE と評価された場合は代替値を返します。