Quantcast
Channel: PHP7.4タグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 113

結局NULL合体演算子(??)はいつ使えばよいのか

$
0
0
はじめに PHP7系から追加されたnull合体演算子(??)とPHP5.3系から使えるエルビス演算子(?:) これらがよくごっちゃになってしまうので、この機会にしっかり使い分けを覚えていこうと思います。 エルビス演算子 まずはエルビス演算子(?:)から。 エルビスプレスリーに似ていることから命名されたらしいです。 演算子界のキング・オブ・ロックンロールですね。?: エルビス演算子を使うと 三項演算子でこのように書いていたところを $a ? $a : $b; こう書くことができます。 $a ?: $b; 三項演算子の第二項が省略できるなんて、確かにこれはロックです。 具体例 それでは具体的な例を書いてみましょう。 $name = 'カバオ'; echo '名前: '. $name ?: 'うさこ'; この場合は 名前: カバオ と表示されますが、 変数をブランクで定義すると $name = '' ; echo '名前: '. $name ?: 'うさこ'; この場合は 名前: うさこ になりました。 PHPでfalse判定されるものでやってみると以下のような結果になりました。 第一項の値 例 評価された項 '' $name = ''; 第2項 null $name = null; 第2項 未定義の変数 error 空配列 $name = []; error 0 $name = 0; 第2項 '0' $name = '0'; 第2項 false $name = false; 第2項 セットされていない変数 $name; error 未定義・空配列・セットされていない変数以外は、基本的に、第二項が評価されることがわかります。 NULL合体演算子 では本題のNULL合体演算子(??)を見ていきましょう。 こちらは残念ながら、特に面白いエピソードはありません。 エルビス演算子と違って、nullじゃなければ第一項に落ちてきます。 具体例 三項演算子で書くとこういうことになります。 !is_null($a) ? $a : $b これがNULL合体演算子だとこのように書けてしまいます。 $a ?? $b; では先ほどと同様にやってみるとどうなるでしょうか。 $name = 'カバオ'; echo '名前: '. $name ?? 'うさこ'; この場合は 名前: カバオ と表示されますが、 $name = '' ; echo '名前: '. $name ?? 'うさこ'; この場合は名前: になってしまいました。 うさこはいずこへ nullかどうかをチェックするため、空文字列ならnullでないと評価され、そのものが表示されてしまうんですね。 なのでnullを定義してあげると $name = null; echo '名前: '. $name ?? 'うさこ'; 名前:うさこ になりました。 うさこおかえり 先ほど同様にPHPでfalse判定されるものでやってみるとこうなります。 第一項の値 例 評価された項 '' $name = ''; 第1項 null $name = null; 第2項 未定義の変数 第1項 空配列 $name = []; 第1項 0 $name = 0; 第1項 '0' $name = '0'; 第1項 false $name = false; 第1項 セットされていない変数 $name; 第1項 null以外は全て第一項に落ちてきました。 結局いつ使うのか? NULL合体演算子結局いつ使えるのでしょうか。 ここでは、使える2パターンを紹介して終わります。 ① isset地獄から抜けられる NULL合体演算子の良いところは第一項が存在しない変数でもnoticeが発生しないところ。 if (isset($_POST['action'])) {     $action = $_POST['action']; } else {     $action = 'default'; } こんなときにissetしなくていいので便利です。 ↓NULL合体演算子を使うとこんなにスッキリ。 $action = $_POST['action'] ?? 'default'; ② 複数の演算子をつなげて使用できる $a = null; $b = null; $c = 0; $result = $a ?? $b ?? $c; echo $result; // 0 AがnullであればBを代入、さらにBがnullであればCを代入する」ということができます。 コードがすっきりと書けるのはいいですが、 使いようによっては可読性が損なわれてしまうので、場面で使い分けたいと思います。

Viewing all articles
Browse latest Browse all 113

Trending Articles