エンジニアの卵_level1

【毎日更新!】新卒2年目エンジニアブログです! プログラムだけじゃなく、マネジメントとかも書いていきたい!

【PHP】null合体演算子とエルビス演算子(三項演算子)の違い【163日目】

null合体演算子とは

null合体演算子(A ?? B)は、
Aが nullundefinedの時に、Bを出力し、
非nullの時にはAを出力するものです。

例がundefinedやnullの場合の処理を考える時に便利です。

// undefinedなので、''が出力される
echo $item ?? '';

// nullなので、''が出力される
$item = null;
echo $item ?? '';

// 非nullなので、10が出力される
$item = 10;
echo $item ?? '';

エルビス演算子(三項演算子)とは

エルビス演算子(?:)は、評価がtrueかによって分岐します。
三項演算子とも呼ばれます。

シンプルなif文を短く書いたり、見やすくするために使われたりしますが、
三項演算子を好まない人もいるので、チームメンバーと事前に使うかどうか決めておくとより良いです。

$item = 10;

// isset($item)がtrueなので、$itemが出力される
echo isset($item) ? $item : '';

// 上の式は下と一緒
if (isset($item)) {
    echo $item;
} else {
    echo '';
}

$item = 1;
// ?と:の間を省略すると、
// $itemが1なので、trueと同等であることから、$itemが出力されます。
echo $item ?: '';

// 上の式は下と一緒
if ($item) {
    echo $item;
} else {
    echo '';
}

それぞれの公式ドキュメント

null 合体演算子 (??)

この演算子は、もし第一オペランドが非 NULL の値であればそれを返し、 そうでない場合は第二オペランドを返します。

http://php.net/manual/ja/migration70.new-features.php

エルビス演算子三項演算子)(?:)

(expr1) ? (expr2) : (expr3) という式は、式1 が TRUE の場合に 式2 を、 式1 が FALSE の場合に 式3 を値とします。

式 expr1 ?: expr3 の結果は、expr1 が TRUE と同等の場合は expr1、 それ以外の場合は expr3 となります。

http://php.net/manual/ja/language.operators.comparison.php