1. ホーム
  2. php

[解決済み】PHP の ?: 演算子 (「Elvis 演算子」)

2022-03-28 12:42:15

質問

今日、ある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'
?>

ちなみに、これは エルビス演算子 .