PHP

PHPの??(はてな2つ)の意味や使い方をわかりやすく解説

こんにちは、シロウ(@shiro_life0)です。

PHPを学習していると、時々「??」(はてな2つ、クエッションマーク2つ)が出てくるかと思います。

この記事ではこの「??」の意味や使い方を解説していきます。

ちなみにGoogleとかで検索する時は「PHP ??」とかで検索してもヒットしないので「PHP はてな 2つ」とか「PHP クエッションマーク 2つ」とかで検索しないといけません。

【結論】??(はてな 2つ)はPHP7以降で使える「null 合体演算子」

見出し通りですが、もう一度。

??(はてな2つ)はPHP7以降で使える「null 合体演算子」です。

要するに『nullのチェックも簡単にできるようになる』というもの。

PHPの公式ドキュメントには下記のように書かれています。

PHP 7 以降ではさらに、”??” 演算子 (null 合体演算子) が使えるようになりました。  PHP 比較演算子-Manual

逆に言えば、PHP7以前では“??” 演算子 (null 合体演算子)を用いてもエラーになるので注意が必要です。

“??” 演算子 (null 合体演算子)の使い方

では使い方を解説していきます。

使い方は簡単で『チェックしたい変数の後に??をつけて、その後にチェックしたい値がnullだった時の処理を書く』だけです。

例えば、下記の通りです。

// Null 合体演算子の使用例①
$test = '値が入ってるよ';
$action =$test ?? '空っぽだよ';
echo $action;

//▼実行結果
値が入ってるよ

// Null 合体演算子の使用例②
$test = null;
$action =$test ?? '空っぽだよ';
echo $action;

//▼実行結果
空っぽだよ

こんな感じで、楽に変数の値がnullかどうかを確認することができます。

ちなみに「”??” 演算子」を使わずに例①を書くと下記のようになります。

$test = '値が入ってるよ';
if (isset($test)) {
    $action = $test;
} else {
    $action = '空っぽだよ';
}

これを??を用いれば短く出来るのでとても楽ですし、見やすいので便利ですね。

“??” 演算子 (null 合体演算子)はネストもできる

ネストも出来るみたいでして、公式ページには下記のコードが載っていました。

$foo = null;
$bar = null;
$baz = 1;
$qux = 2;

echo $foo ?? $bar ?? $baz ?? $qux; // 出力は 1 です

$foo と $bar はnullなのでスルーして、その後の$bazが呼び出されています。
当然、$bazが呼び出されたので、$quxは呼び出されずに処理が終了します。

“??” 演算子 (null 合体演算子)を使う時の注意点

“??” 演算子 (null 合体演算子)は『return $test ?? ‘テスト’』のようにreturnで用いても上手く動作しないので、注意が必要です。

公式リファレンスには下記のように記述されていました。

Null 合体演算子は式であることに注意しましょう。変数として評価されるのではなく、式の結果として評価されます。 変数を参照で返そうとするときには、これを意識しておくことが重要です。 参照返しの関数で return $foo ?? $bar; のように書いてもうまく動かずに、 警告が発生します。

??(はてな2つ、クエッションマーク2つ)のまとめ

まとめると下記の通りです。

【??のまとめ】
  • ??は『”??” 演算子 (null 合体演算子)』と呼ばれるもの
  • PHP7以降で使える
  • nullかどうかを簡単に判別できる
  • ネストもできる
  • 参照返しの関数で return $foo ?? $bar; のように書いても上手く動作しない

これを使いこなせばかなりコードを各量も減らせますし、見栄えもよくなりますので、ぜひ活用してみてください。

今回は以上です。お疲れ様でした(*´ω`*)ノ