読み込み中...

PHP Nullable 8選:理解から応用まで完全ガイド

PHP Nullableの使い方と応用を解説する記事のイメージ画像 PHP
この記事は約5分で読めます。

【サイト内のコードはご自由に個人利用・商用利用いただけます】

この記事では、プログラムの基礎知識を前提に話を進めています。

説明のためのコードや、サンプルコードもありますので、もちろん初心者でも理解できるように表現してあります。

本記事のサンプルコードを活用して機能追加、目的を達成できるように作ってありますので、是非ご活用ください。

※この記事は、一般的にプロフェッショナルの指標とされる『実務経験10,000時間以上』を満たす現役のプログラマチームによって監修されています。

※Japanシーモアは、常に解説内容のわかりやすさや記事の品質に注力しております。不具合、分かりにくい説明や不適切な表現、動かないコードなど気になることがございましたら、記事の品質向上の為にお問い合わせフォームにてご共有いただけますと幸いです。
(送信された情報は、プライバシーポリシーのもと、厳正に取扱い、処分させていただきます。)

はじめに

この記事を読めば、PHPで使われるNullableについて理解し、使い方まで身につけることができます。

Nullableを使えば、変数や関数の戻り値がnullを許容することを示すことができます。

それではさっそく始めましょう。

●PHPとNullableとは?

PHPでは、型宣言を行うことで変数や関数の戻り値がどのような型を持つべきかを明示することができます。

Nullableはこの型宣言の一部で、特定の変数や関数の戻り値がnullを許容することを示します。

○Nullableの基本

PHPでは、型の前に?マークを付けることでその型がNullableであることを示します。

たとえば、関数の戻り値が文字列かnullであることを示すには次のように書きます。

function getGreeting(): ?string {
    // 処理
}

この関数は、string型かnullを戻り値とすることができます。

●Nullableの使い方

それでは、具体的なコードを通じてNullableの使い方を見ていきましょう。

○サンプルコード1:Nullableなパラメータ

このコードでは、greet関数の引数$nameがnullを許容するようにしています。

nullが来た場合は、”Hello, guest!”と表示します。

function greet(?string $name) {
    if ($name === null) {
        echo "Hello, guest!";
    } else {
        echo "Hello, " . $name;
    }
}

○サンプルコード2:Nullableなプロパティ

ここでは、Userクラスのプロパティ$nameがnullを許容するようにしています。

class User {
    public ?string $name;

    public function __construct(?string $name) {
        $this->name = $name;
    }
}

○サンプルコード3:Nullableな戻り値

このコードでは、findUser関数がUser型かnullを返すことを示しています。

$idに該当するUserが存在しない場合はnullを返します。

function findUser($id): ?User {
    // $idに該当するUserが存在すればそのUserを返す。
    // 該当するUserが存在しなければnullを返す。
}

●Nullableの応用例

さて、Nullableはさまざまな場面で利用することが可能です。

具体的な使用例をいくつか見てみましょう。

○サンプルコード4:オプションパラメータとしてのNullable

このコードでは、makeCoffee関数の引数$typeがnullを許容するようにしています。

もし$typeがnullだった場合、デフォルトのコーヒーの種類である’エスプレッソ’を利用します。

function makeCoffee(?string $type = null) {
    if ($type === null) {
        $type = 'エスプレッソ';
    }
    echo $type . "を作ります。";
}

○サンプルコード5:Nullを返す可能性のある関数

このコードでは、findOrder関数がOrder型かnullを返すことを示しています。

該当するOrderが存在しない場合、nullが返されます。

function findOrder($id): ?Order {
    // もし$idに該当するOrderが存在すればそのOrderを返す
    // それ以外の場合はnullを返す
}

○サンプルコード6:Nullを返す可能性のあるメソッド

このコードでは、OrderRepositoryクラスのfindメソッドがOrder型かnullを返すことを示しています。

該当するOrderが存在しない場合、nullが返されます。

class OrderRepository {
    public function find($id): ?Order {
        // もし$idに該当するOrderが存在すればそのOrderを返す
        // それ以外の場合はnullを返す
    }
}

○サンプルコード7:Nullオブジェクトパターン

このコードでは、NullOrderクラスがOrderクラスを継承し、isNullメソッドをオーバーライドしています。

Nullオブジェクトパターンでは、nullを意味する具体的なオブジェクトを作成します。

class NullOrder extends Order {
    public function isNull(): bool {
        return true;
    }
}

○サンプルコード8:Null合体演算子とNullable

このコードでは、ユーザー名がnullの場合にデフォルト値’Guest’を代入するために、Null合体演算子を使用しています。

getName()メソッドがnullを返す可能性がある場合に便利です。

$name = $user->getName() ?? 'Guest';

●注意点と対処法

Nullableを使用する際には、nullが返された時の対処法をしっかりと考えておくことが重要です。

nullを返す可能性がある関数やメソッドを使用する際には、常にnullチェックを行うようにしましょう。

●カスタマイズ方法

また、Nullableの扱いはプロジェクトや開発者のスタイルによります。

必要に応じて、Nullableを使う場所、使わない場所を決めることも大切です。

まとめ

以上が、PHPにおけるNullableの基本的な知識と使い方についての解説です。

Nullableは非常に便利な機能であり、適切に使いこなすことでコードの安全性を向上させることができます。

しかし、使用する際にはnullチェックを忘れないよう注意が必要です。