PHPで??(クエスチョンマーク2個)はnull合体演算子!

この記事には広告を含む場合があります。記事内で紹介する商品を購入することで、当サイトに売り上げの一部が還元されることがあります。

Laravelでコーディングしているときに、ライブラリのソースを見ていたら以下のような実装を発見しました。

$return_url = $returnUrl ?? route('home'),

このクエスチョンが2つならんだプログラムを私は今まで知りませんでした。

果たしてreturn_urlにはどうゆう結果が格納されるのか?

「PHP ??」 でグーグル検索すると「PHPとは」という検索ワードで実行したような検索結果が表示されてしまいます。

「PHP ??」 でグーグル検索すると「PHPとは」という検索ワードで実行したような検索結果が表示されてしまいます。

検索結果が意図した結果ではない

このphp ??(クエスチョンマーク演算子が2個)の正体はタイトル通り

null合体演算子

という演算子でした。

私は3項演算子は大好きでよく使っていましたが、null合体演算子の存在は知りませんでした。

PHPではPHP 7以降でnull合体演算子??を利用できます。

$result = $hoge1 ?? $hoge2

// hoge1がNULLでない場合はhoge1がresultに格納されます
// hoge1がNULLの場合は代わりに右辺のhoge2をresultに格納

上記の場合、hoge1がNULLでない場合はhoge1がresultに格納されます。

hoge1がNULLの場合は代わりに右辺のhoge2をresultに格納してくれます。

つまり、左辺の式の結果がNULLでなければその結果をそのまま利用したい時に便利です。

null合体演算子を知らないときは3項演算子で以下のようにやってました。

// 3項演算子だとhoge1が2回登場して美しくない
// hoge1がNULLならhoge2を、hoge1がNULLではないならhoge1を返却
$result = isset($hoge1) ? $hoge1 : $hoge2

// NULL合体演算子を使えばシンプルになります。
$result = $hoge1 ?? $hoge2