Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

【PHP】null合体演算子の書き方と使い方の基本

PHP 7.0以降で導入されたnull合体演算子(??)の基本的な書き方と使い方を解説します。変数がnull(値が設定されていない状態)の場合に、短く安全にデフォルト値を設定できるこの便利な機能は、Web開発におけるコードの可読性と効率を大きく向上させます。初心者でも理解できるよう、具体的な利用シーンを交えながらわかりやすく紹介します。

作成日: 更新日:

開発環境

  • OS: Windows10
  • Editor: Visual Studio Code
  • PHP: 8.0以降

PHPのnull合体演算子とは

null合体演算子とは、変数が null である場合に代わりに別の値を返すための演算子です。これはPHP 7.0から導入されました。

null合体演算子の基本的な機能

プログラムを書いていると、「この変数に値が入っているかな? もし入っていなかったら、代わりにこの値を使いましょう」という処理をよく行います。ここで言う「値が入っていない」状態の一つが null です。

null とは、その変数に値が設定されていないことを示します。例えば、データベースからデータを取り出そうとして、該当するデータが一つもなかった場合などに、変数が null になることがあります。

null合体演算子 (??) は、左側のオペランドが null であった場合に、右側のオペランドの値を返す働きをします。左側のオペランドが null でない場合は、左側のオペランドの値をそのまま返します。

具体的な構文は以下のようになります。

1$result = $variable_a ?? $variable_b;

この例では、$variable_a が null でなければ $variable_a の値が $result に代入されます。もし $variable_a が null であった場合は、$variable_b の値が $result に代入されます。

従来の書き方との比較

null合体演算子が導入される前は、同じような処理を行うために isset() 関数と三項演算子を組み合わせて使用することが一般的でした。

1// null合体演算子を使用しない場合
2$variable_a = null;
3$variable_b = 'デフォルト値';
4
5$result_old = (isset($variable_a)) ? $variable_a : $variable_b;
6echo $result_old; // 出力: デフォルト値

null合体演算子を使用すると、同じ処理がより短く、分かりやすく書けます。

1// null合体演算子を使用した場合
2$variable_a = null;
3$variable_b = 'デフォルト値';
4
5$result_new = $variable_a ?? $variable_b;
6echo $result_new; // 出力: デフォルト値

このように、isset() のチェックと値の代入を一度に行えるため、コードが簡潔になります。

null合体演算子の利用シーン

null合体演算子は、特に次のような場面で役立ちます。

  1. HTTPリクエストパラメータの取得 ユーザーがWebブラウザから送信するフォームデータ($_GETや$_POST配列)は、送られてこない可能性のあるパラメータに対してデフォルト値を設定する場合に便利です。

    1// URL: example.com/page.php?name=太郎
    2$user_name = $_GET['name'] ?? 'ゲスト';
    3echo $user_name; // 出力: 太郎
    4
    5// URL: example.com/page.php (nameパラメータがない場合)
    6// $_GET['name'] は null です
    7$user_name_default = $_GET['name'] ?? 'ゲスト';
    8echo $user_name_default; // 出力: ゲスト
  2. 設定値や配列のデフォルト値設定 配列から値を取り出す際、キーが存在しない場合にデフォルト値を設定したい場合にも利用できます。

    1$config = [
    2    'timeout' => 30,
    3    'retry' => 3
    4];
    5
    6// 'timeout' キーは存在する
    7$timeout_value = $config['timeout'] ?? 60;
    8echo $timeout_value; // 出力: 30
    9
    10// 'log_level' キーは存在しない
    11$log_level_value = $config['log_level'] ?? 'info';
    12echo $log_level_value; // 出力: info

サンプルコード

php/chapter12/01.php

ここでは、変数$usernameにnull(何もない状態)を代入しています。この後の例では、このnullである変数に対して、値が存在しない場合の処理方法を見ていきます。

01.php
1<?php
2// 例1: ユーザー名の表示
3// $username が存在し、nullでない場合はその値を使い、そうでない場合は「ゲスト」を表示する
4// $username が null の場合
5$username = null;
6

php/chapter12/02.php

このコードでは、一般的なif文を使って、$usernameがnullではないかを確認しています。 もし$usernameに値があればその値を$displayNameに代入し、nullであれば'ゲスト'という文字列を$displayNameに代入しています。これは、値がない場合に特定のデフォルト値を設定する伝統的な方法です。

02.php
1<?php
2// if 文を使用する場合
3if ($username !== null) {
4    $displayName = $username;
5} else {
6    $displayName = 'ゲスト';
7}
8
9echo "if文を使用した結果: " . $displayName . "\n";
10

php/chapter12/03.php

ここでは、PHPのnull合体演算子 ?? を使用しています。 この演算子は、左側の値(この場合は$username)がnullであった場合に、右側の値('ゲスト')を代入するという働きをします。02.phpのif文を使ったコードと同じ結果を得られますが、より短い記述で同じ処理を実現できる点が特徴です。

03.php
1<?php
2// null合体演算子を使用する場合
3$displayName = $username ?? 'ゲスト';
4
5echo "null合体演算子を使用した結果: " . $displayName . "\n";
6

php/chapter12/04.php

次に、配列のキーが存在しない場合の例を見ていきます。 ここでは$dataという配列を定義していますが、'age'というキーはありますが、'name'というキーは含まれていません。この状態を基に、配列に特定のキーがない場合の処理方法を学びます。

04.php
1<?php
2// 例2: 配列のキーが存在しない場合のデフォルト値の設定
3// $data 配列の 'name' キーが存在する場合はその値を使い、そうでない場合は「不明」を表示する
4// 配列の設定
5$data = [
6    'age' => 25
7];
8

php/chapter12/05.php

このコードでは、if文とisset()関数を組み合わせて、$data配列の中に'name'というキーが存在するかどうかを確認しています。 isset()関数は、変数がセットされている(存在し、かつnullではない)場合にtrueを返します。もし'name'キーが存在すればその値を$nameに代入し、存在しなければ'不明'を$nameに代入しています。これも、キーがない場合にデフォルト値を設定する一般的な方法です。

05.php
1<?php
2// if 文を使用する場合
3if (isset($data['name'])) {
4    $name = $data['name'];
5} else {
6    $name = '不明';
7}
8
9echo "if文を使用した結果: " . $name . "\n";
10

php/chapter12/06.php

ここでも、null合体演算子 ?? を使用しています。 この演算子は、左側の値(この場合は$data['name'])がnullであるか、あるいは変数がセットされていない(isset()がfalseを返す)場合に、右側の値('不明')を代入します。 つまり、$data配列に'name'キーが存在しない場合に'不明'が$nameに代入されます。05.phpのif文を使ったコードと比較して、記述が非常に簡潔になっていることがわかります。

以上の例から、PHPのnull合体演算子 ?? は、変数がnullである場合や、配列のキーが存在しない場合に、簡単にデフォルト値を設定できる便利な機能であることがご理解いただけたかと思います。if文を使うよりもコードを短く、そして読みやすくする効果がありますので、実際のプログラミングで積極的に活用してみてください。

06.php
1<?php
2// null合体演算子を使用する場合
3$name = $data['name'] ?? '不明';
4
5echo "null合体演算子を使用した結果: " . $name . "\n";
6

おわりに

この記事では、PHP 7.0以降で利用できるnull合体演算子 ?? の基本的な書き方と使い方について解説しました。 この演算子を使うと、変数がnullである場合や、配列のキーが存在しない場合に、短い記述で安全にデフォルト値を設定できます。 従来のif文やisset()関数を用いたコードと比較して、より簡潔に書けるため、コードの可読性が大きく向上します。 HTTPリクエストのパラメータ取得や、設定値のデフォルト設定といった実際の開発シーンで非常に役立つ機能ですので、ぜひ積極的に活用してみてください。

関連コンテンツ