はじめに
この記事では、三項演算子とnull合体演算子(??),そしてエルビス演算子(?:)についてまとめています。
それぞれの違い
まずは、実際にコードをみてみます。
$x = null;
$y = 0;
$z = 1;
// 三項演算子
$a = $x ? 'true' : 'false'; // 'false'
$b = $y ? 'true' : 'false'; // 'false'
$c = $z ? 'true' : 'false'; // 'true'
$abc = $xyz ? 'true' : 'false'; // Notice Undefined variable
// エルビス演算子(実は三項演算子)
$a = $x ?: 'false'; // 'false'
$b = $y ?: 'false'; // 'false'
$c = $z ?: 'false'; // 1
$abc = $xyz ?: 'false'; // Notice Undefined variable
// null合体演算子
$a = $x ?? 'false'; // 'false'
$b = $y ?? 'false'; // 'false'
$c = $z ?? 'false'; // 1
$abc = $xyz ?? 'false'; // false
エルビス演算子と三項演算子は
三項演算子, エルビス演算子
この二つは、条件式が真の場合に評価される値が条件式そのものか、そうでないか、という点で異なっているだけです。
これらは、条件式がtrueかfalseか、が重要です。
条件式がundefinedの場合には、Noticeエラーが発生します。
// 三項演算子
【条件式】 ? 【trueの場合に評価される式】 : 【falseの場合に評価される式】
// エルビス演算子(二項演算子)
【条件式(trueの場合に評価される式)】 ?: 【falseの場合に評価される式】
null合体演算子
null合体演算子の場合に重要なのは、条件式がnullであるかどうかです。
undefinedの場合もnullという判定になるのでNoticeエラーが発生せずに値が返ってきます。
【条件式(nullでない場合に評価される式)】 ?? 【nullの場合に評価される式】