PHP で変数のデフォルト値を設定したい時
false の場合デフォルト値を使う
<?php $var = $foo ?: $bar; // 下記と同様 $var = $foo ? $foo : $bar;
?: は三項演算子と同じ扱いで $foo が false 扱いになる場合は $bar が代入される
<?php $var = null ?: 'default'; // => 'default' $var = false ?: 'default'; // => 'default' $var = 0 ?: 'default'; // => 'default' $var = '' ?: 'default'; // => 'default' $var = [] ?: 'default'; // => 'default'
Null の場合デフォルト値を使う ?? (Null合体演算子)
PHP 7 からは左辺が null の場合は右辺を代入する ?? Null合体演算子 が使用できる
<?php $var = $foo ?? $bar; // 下記と同様 if (isset($foo)) { $var = $foo; } else { $var = $bar; }
?: では デフォルト値になっていたものも null でなければ使用される
<?php $var = null ?? 'default'; // => 'default' $var = false ?? 'default'; // => false $var = 0 ?? 'default'; // => 0 $var = '' ?? 'default'; // => '' $var = [] ?? 'default'; // => [] // $_POST で値が渡ってこなかった時とかにも使える $pram = $_POST['foo'] ?? 'default';
false になるときデフォルト値を使いたい時は ?:, 存在しない時にデフォルト値を使いたいときは ?? と言う感じ。
?: が暗黙の型変換だから、基本的に ?? を使うのが良さそう。 ( PHP の empty() はトラップが多そう…)
[参考]
