PHPのNull合体演算子(??)は論理演算子の1つです。
Null合体演算子(??)は、もし第一オペランドが非nullの値であればそれを返し、そうでない場合は第二オペランドを返します。
Null合体演算子
Null合体演算子(??)を利用することで、代入する値がnullかundefined(未定義)の場合は違う値を代入することができます。
これを使用することで、デフォルト値を設定するなどの使い方ができます。
Null合体演算子(??)は0や””(空文字)は有効値と判定します。
あくまで、未定義かnullの場合に第二オペランドを返します。
$first = $_GET['user'] ?? 'nobody';
var_dump($first); // string(6) "nobody"
$str;
$second = $str ?? 'nobody';
var_dump($second); // string(6) "nobody"
$str = null;
$third = $str ?? 'nobody';
var_dump($third); // string(6) "nobody"
$str = 0;
$fourth = $str ?? 'nobody';
var_dump($fourth); // int(0) 0は有効値として評価される
$str = 'abc';
$fifth = $str ?? 'nobody';
var_dump($fifth); // string(6) "abc"
$str = "";
$sixth = $str ?? 'nobody';
var_dump($sixth); // string(0) "" 空文字も有効値として評価される
$str1;
$str2 = null;
$seventh = $str1 ?? $str2 ?? 'nobody';
var_dump($seventh); // string(6) "nobody"
デフォルト値としての使用
デフォルト値を埋める際にisset()と三項演算子を使用することが多いと思います。
Null合体演算子(??)を利用すれば代入処理が簡素になります。
下記の2つの処理は同じ結果になります。
$_GET['user'] = 'user1'; // GETリクエスト想定
$first = isset($_GET['user']) ? $_GET['user'] : 'nobody';
var_dump($first); // string(5) "user1"
$first = $_GET['user'] ?? 'nobody';
var_dump($first); // string(5) "user1"
まとめ
PHPのNull合体演算子(??)はPHP 7.0から使用することができます。
PHP 5系では使用できないので注意が必要です。
余談ですが「Null合体演算子」ってなんか言いたくなりますよね。