お知らせ

【初学者必見!】PHPのNull合体演算子(??)の使い方を解説!

PHP

どうも、こんにちは!ぴこっそです。

このブログでは、主にJavaScriptやPHPに関する学習記事を発信しています。

今回は、PHPで使える便利な演算子のひとつ、**「Null合体演算子(??)」**について解説していきます。

使い方はもちろん、メリット・デメリットまでわかりやすく紹介していきます!

特に、if文の基本を学び終えた初学者の方にはぜひ知ってほしい構文なので、ぜひ最後まで読んでみてください。

Null合体演算子とは??

Null合体演算子とは、簡潔に言うと、

IF文を簡潔にまとめることができる演算子

です!

Null合体演算子の基本形は以下の通りです。

$変数 = $a ?? $b;

この式の意味として、

「$a が nullでない なら $a を代入し、null なら $b を代入する」

になります。

よく使われる用途として、フォームの入力値が未設定(null)の場合に、デフォルトの値を設定したいときなどに使うととても便利です。

実際のネット掲示板でも名前を入力しない場合は「名無しさん」や「匿名さん」などといったデフォルト値に置き換わるのもこの仕組みを利用したものになります。

ただし、

空文字 “” や false などは「null」ではない点に注意!

↑の場合は、この演算子は使えなくなります。

この場合は、三項演算子(?:)を使うようにしましょう。

三項演算子について知りたい方は以下の記事から閲覧できます。

ちなみに、

$変数 = $a ?? $b;


をIF文に書き直すと、

if($a != null){
    $変数 = $a
}else{
    $変数 = $b
}

と言うようになります。

IF文に書き直すとかなり複雑に見えるようになりますね💦

Null合体演算子を使うメリット

続いて、Null合体演算子を使うメリットについて解説します。

メリット1:コードの可読性の向上につながる

「Null合体演算子とは?」の解説冒頭にもありましたが、Null合体演算子を使う最大のメリットは

IF文を簡潔にまとめることができる!

点にあります。

IF文を簡潔にまとめることで、

コードの可読性の向上

につながります。

例として、Null合体演算子を使ったコードとIF文を使ったコードの比較をしてみましょう。

↓Null合体演算子を使ったコード

$name = $_POST["name"] ?? "ゲスト";
echo "こんにちは、{$name}さん!";

↓IF文を使ったコード

if (isset($_POST["name"])) {
    $name = $_POST["name"];
} else {
    $name = "ゲスト";
}

上の二つのコードはいずれも同じ動作をするコードですが、IF文のコードの方が少々冗長で、Null合体演算子を使ったコードの方がシンプルに見えると思います。

上の例からもNull合体演算子はIF文を非常にシンプルにまとめることができ、それによってコードの可読性が向上することがわかります。

メリット2:初期値設定が少なく済む

Null合体演算子を使うことによって、初期値設定が少なくなるため、

コードを修正する回数が少なく済みます

以下にNull合体演算子とIF文を使った二つの例を見てみましょう。

↓Null合体演算子を使ったコード

$name = $_POST["name"] ?? "ゲスト";

↓IF文を使ったコード

if (isset($_POST["name"])) {
    $name = $_POST["name"];
} else {
    $name = "ゲスト";
}

この二つのコードを見たときに初期値の設定が楽なのは圧倒的にNull合体演算子を使ったコードになります。

例えば、変数名($name)を変えたい場合は、上のコードでは一回で済みますが、下のコードでは二回変更する必要が出てきます。

このように、Null合体演算子を使うことによって、コードを修正する回数が少なく済むというメリットもあります。

このように、Null合体演算子を使うことによって、コードの可読性が向上し、初期値の設定も少なく済みます

Null合体演算子を使うデメリット

続いて、Null合体演算子を使うデメリットについても解説します。

デメリット1:複雑な条件分岐には向かない

Null合体演算子では、IF文を短くまとめてくれることはできるものの、複雑な条件分岐には向いてないことが多いです。

以下にその例を挙げてみました。

$value = $a ?? $b ?? $c ?? "default";

このコードを見るとわかる通り、非常にわかりづらいです(私は全くわかりません)

このように、Null合体演算子は、複雑な条件や条件が複数になる場合は向いてないことが多く、これらをNull合体演算子で表現しようとすると、コードの可読性逆に低下させることがあります。

そのため、もし複雑な条件や複数の条件をコーディングする場合は、IF文を使った方がいいです。

ちなみに先ほどのコードをIF文に書き換えると、

if ($a !== null) {
    $value = $a;
} elseif ($b !== null) {
    $value = $b;
} elseif ($c !== null) {
    $value = $c;
} else {
    $value = "default";
}

こうなります。このIF文もなかなかな読みづらい、、、

デメリット2:Null以外の値であると使えない

「Null合体演算子とは??」の解説にもありましたが、


Null合体演算子は「null」しか判定できません。


つまり、空文字 “” や false などは「null」ではない ため、

これらの値の場合、Null合体演算子では置き換えが行われません。

$value = "" ?? "デフォルト";
echo $value; // 出力結果:""(空文字のまま)

このようにNull合体演算子は「Null専用」でしか使えない文であるため、汎用性は低いと私は考えております。

もし、null 以外の値(例えば空文字や false)でもシンプルに条件式をまとめたい場合は、

三項演算子(?:) を使うのがおすすめです。

三項演算子についてもっと詳しく知りたい方は以下の記事を参考にしてください。

このようにNull合体演算子には、複雑や条件式には向かず、また「Null専用」の演算子のため、汎用性はそこまで高くないというデメリットもあります。

まとめ

今回はNull合体演算子についての使い方とメリット・デメリットについてまとめました。

Null合体演算子は、IF文を簡潔にまとめてくれる演算子です。メリットとデメリットは以下の通りです。

メリット
・IF文に比べてコードの可読性が向上する
・初期値の設定が少なく、コードの修正回数が少なくて済む

メリット
・IF文に比べて複雑な条件分岐には向かない
・Null以外の値であると、使えない

これらの要素もあることから、Null合体演算子は使える場面を考えながら使うと非常に有用な演算子であると私は考えます。

Null合体演算子は三項演算子と同様、まずIF文の学習を通してから、学ぶと非常に効果的に学べると私は考えます。

最後に

今回のブログ記事で「Null合体演算子」についてよく分かったと思う人が一人でもいれば嬉しい限りだと私は考えます。

ブログは毎日投稿を行っておりますので、ぜひ他の記事も見てみてください。

最後までご覧いただきありがとうございました。

コメント

タイトルとURLをコピーしました