2026.01.24
#php#programing
blog
phpのnull合体演算子を深掘りする
不思議に思ったこと
以下のコードが実行された時、$user->nameで例外となり2行目でエラーが発生すると思っていた。
$user = null;
$name = $user->name ?? null;
しかし、実際には例外は発生せず、$name = nullの状態で次の処理に進む。
!HELP 疑問
$user->name ?? null;のような「null合体演算子」では、 なぜ$user->nameで例外をthrowしないのか...?
調べてみた
式
(expr1) ?? (expr2)は、expr1がnullである場合はexpr2と評価され、それ以外の場合はexpr1と評価されます。 この演算子は、左側の値が存在しない場合でもnoticeやwarningが発生しません。isset()と同じ挙動です。 これは、配列のキーを扱う場合に便利です。※ 参考: 比較演算子 - php公式
「左側の値(式1)が null かどうか」を評価して結果を返すので、
$user = null である → $user->name = null である という評価をしているようです。
注意したい点
- 厳密に
nullを評価する
式1が null ではなく false や '' だった場合、式1を結果として返す
$val = '';
$result = $val ?? 'NULL'; // 結果: ''
- 使えるのは
PHP 7.0以降
バージョン問題ばかりは苦しいですネ...