??と?:
$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