PHPの??(はてな2つ)の意味や使い方をわかりやすく解説
PHPを学習していると、時々「??」(はてな2つ、クエッションマーク2つ)が出てくるかと思います。
この記事ではこの「??」の意味や使い方を解説していきます。
【結論】??(はてな 2つ)はPHP7以降で使える「null 合体演算子」
見出し通りですが、もう一度。
??(はてな2つ)はPHP7以降で使える「null 合体演算子」です。
要するに『nullのチェックも簡単にできるようになる』というもの。
PHPの公式ドキュメントには下記のように書かれています。
PHP 7 以降ではさらに、”??” 演算子 (null 合体演算子) が使えるようになりました。
逆に言えば、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; のように書いても上手く動作しない
これを使いこなせばかなりコードを各量も減らせますし、見栄えもよくなりますので、ぜひ活用してみてください。
今回は以上です。お疲れ様でした(*´ω`*)ノ