Edited at

PHP7調査(11)??演算子の新設

More than 3 years have passed since last update.

PHP7で2項演算子「??」が新設されます。左オペランドがnull以外の値であればその値を、そうでなければ右オペランドを返すようなものです。

<?php

var_dump(null ?? false ?? true); // false

これはPHP 5.3で導入されたエルビス演算子「?:」と少し似ています。エルビス演算子は真偽の判断を行いますが、??演算子はnullかどうかの判断を行う点が異なっています。

<?php

var_dump(null ?: false ?: true); // true

それだけでなく、??演算子はisset()と同様に未定義値をチェックしてもエラーになりません。これは非常に大きな違いで、??演算子があれば今までのisset()地獄から解放されるかもしれません。

<?php

var_dump($arr["foo"] ?: "bar"); // 未定義だとUndefined variableかUndefined indexで怒られちゃう
var_dump(isset($arr["foo"]) ? $arr["foo"] : "bar"); // 結局こう書いてたよね…

var_dump($arr["foo"] ?? "bar"); // PHP7ではこれで動く!


参照