【PHP】関数の引数が NULL 許容型の宣言方法

こんにちは!CODE CLUB965のKです!

今回は、PHPで関数の引数がNULLの場合でも許容する宣言方法について解説しようと思います。

基本的には以下の2つの方法があります。

・デフォルト値指定の宣言方法
・nullable 型宣言による宣言方法

ひとつずつ説明します。

NULL 許容型の宣言とは?

PHP 7.0 以降ですが、関数の引数や戻り値の型宣言が出来るようになりました。

例えば、

function outputNum(int $num) {
    print_r($num);
}

上記のような関数を宣言することで、引数の $num は int型として受け取ることを宣言しています。
この引数に、int型以外の型の値を渡すとエラーが発生します。

この型宣言の機能ですが、上記のコードのままだと引数に NULL を渡した場合にエラーになります。

今回はこれを許容する方法を説明します。

デフォルト値指定の宣言方法

まずひとつ目の方法ですが、引数のデフォルト値を指定することで NULL 許容型を実現できます。
なので、引数に NULL を渡してもエラーにはなりません。
(※ PHP7.0以降で使えます。)

最初に書いたコード例を使って解説します。

function outputNum(int $num = null) {
    print_r($num);
}

上記のコード例を見たら分かると思いますが、関数の引数を「int $num = null」とすることでデフォルト値としてNULLを指定しています。

こうすることで、引数にNULLが来ても許容する関数を作ることができます。

nullable 型宣言による宣言方法

nullable 型宣言とは、型名の前に「?」を追加することで NULL 許容型として宣言することです。
例えば、上記の例だと、「?int」とすることで整数型か NULL かのどちらかを受け入れることができるようになります。(※ PHP7.1以降で使えます。)

function outputNum(?int $num) {
    print_r($num);
}

2種類の宣言方法の違い

上記で解説した2種類の宣言方法の違いは、デフォルト値があるかどうかです。
これだけだと意味が分からないと思うので簡単に説明します。

・デフォルト値指定の宣言方法の場合:「int $num = null」
 → 引数に何も渡さない場合でもエラーになりません。要するに、「outputNum()」と書いてもエラーになりません。

・nullable 型宣言の場合:「?int $num」
 → 引数に何も渡さない場合、引数不足でエラーが発生します。「outputNum()」と書くとエラーになります。

最後に

今回の内容は特に難しくなかったと思いますが、意外と違いを知らずなんとなく使っている方もいるかもしれないと思い解説しました。

2種類の宣言方法の違いを理解し、関数の設計を考えた上で使い分けて使用して下さい。

それでは、また!

Follow me!