Posted at

三項演算子と??(ハテナハテナ)と?:(ハテナ:)


はじめに

この記事では、三項演算子と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の場合に評価される式】