エンジニアのひよこ_level10

毎日更新してた人。たまに記事書きます。

【PHP】null合体演算子(??) エルビス演算子(?:)の違い【669日目】

??と?:

$a ?: null$a ?? nullという表記はよく見ると思います。

特に右は結構書く機会多いですね。

では、これらが何をしてるんでしょうφ(・

両方とも、if文の省略

どんな演算子かというと、両方ともよく使うif文の省略系だったりします。

三項演算子をご存じの方は、ただのif文と考えると思いますが、今回の ?:は微妙に動作が違います。

これは、三項演算子ではなく、エルビス演算子と呼ばれるものです。

条件式が引数自体か、issetの結果かの違い

$a = "";

// $a ?: null -> return null
if ($a) {
    return $a;
} else {
    return null;
}
$a = "";

// $a ?? null -> return $a
if (isset($a)) {
    return $a;
} else {
    return null;
}

このように、 ??はissetの結果で、trueであればそのまま。そうでなければ右の値を返します。
?:は左の引数をそのまま判定に使って、trueであればそのまま。そうでなければ右の値を返します。

三項演算子を知ってる人は、もしかすると戻り値がvoidなのではないかと思うかもしれませんが、
実は違うので、間違えないようにしましょうφ(・

(私は今日勘違いしてました)

公式ドキュメント

https://www.php.net/manual/ja/language.operators.comparison.php