PHP の Null 合体演算子について

こんにちは、しましまです。

皆さんは三項演算子を使いますか?
私は最近特に意識して使うようになりました。
何度も変数への代入をする必要がなく、コードを簡略化できて幸せな気分になるためです。
今回は三項演算子と Null 合体演算子についてまとめてみました。

処理の例

$name = 'no_name';
if (isset($userName)) {
	$name = $userName;
}

// 三項演算子にする場合
$name = isset($userName) ? $userName : 'no_name';

上の例は普通の if 文を用いた処理とその処理を三項演算子で行った処理です。

PHP7 から追加された Null 合体演算子 を使うと更に簡潔にできます。

$name = $userName ?? 'no_name';

実際のプログラムでは長い値を参照することはよくあるため、知っているだけでかなり簡略化できるようになります。
さらに Null 合体演算子は連結することもでき、その場合は左から順に非 null のチェックを行います。

// $name, $name_kana の順で判定を行い、非nullの値となった時点でその値が返却されます。
$name = $name ?? $name_kana ?? 'no_name';

※ただし Null 合体演算子は isset 関数を省略したものであるため、判定する対象が空文字や bool 値の false や数値の0の場合はその値を返却することに注意しましょう。

おわりに

最近は案件として PHP のバージョンを上げる対応を担当することが多いので、比較的新しめの演算子について取り上げてみました。

今回取り上げるにあたり、三項演算子や Null 合体演算子について調査しましたが、調査中にコードの読みにくさについての指摘がありました。
確かに複雑な処理でこれらを使用するとコードの可読性は下がってしまうように私も感じています。

複雑な処理ではこれらを避け、臨機応変に対応する必要がありそうです。