スキップしてメイン コンテンツに移動

PHP8matchで可読性UP

PHP8matchで可読性UP

PHP8の条件分岐の進化

PHP8では条件分岐がより柔軟かつ安全に扱えるようになりました。特に厳密な型チェックがデフォルトで有効になることで、型不一致によるバグを未然に防止できます。
例えば、declare(strict_types=1);をファイル先頭に書くと、関数の引数や戻り値が宣言した型と一致しない場合に例外が投げられます。これにより、条件判定時に予期せぬ型変換が起きるリスクが減少します。

また、PHP8ではmatch式が導入され、従来のswitch文よりも安全で簡潔に条件分岐を記述できるようになりました。match厳密な比較(===)を行うため、型揺れを防止します。

if文とmatch式の比較

従来のif文は柔軟性が高い一方で、複数の条件を連続で書くと可読性が低下します。match式はパターンマッチングに似た構文で、条件が明確に列挙されるため、コードの意図が一目で分かります。

declare(strict_types=1);

function getStatusMessage(int $statusCode): string {
    return match ($statusCode) {
        200 => 'OK',
        404 => 'Not Found',
        500 => 'Internal Server Error',
        default => 'Unknown Status',
    };
}

上記の例では、matchswitchよりも簡潔で、defaultが必ず返るため、制御フローが明確です。
一方、if文は条件が複雑な場合に有効ですが、可読性を保つために早期リターンを併用することが推奨されます。

早期リターンで可読性を高める

関数の冒頭で条件を判定し、該当する場合はすぐにreturnする「早期リターン」パターンは、ネストを浅く保ち可読性を向上させます。
例えば、入力値が不正な場合に早期リターンすると、残りのロジックがインデントの深さを増すことなく書けます。

function processData(?array $data): void {
    if ($data === null) {
        // 早期リターンで無効な入力を排除
        return;
    }

    // ここからは$dataが確実に配列
    foreach ($data as $item) {
        // 処理
    }
}

このように制御フローをシンプルに保つことで、他の開発者がコードを読む際の負担が軽減され、メンテナンス性が向上します。

この記事はAIによって作成されました。

コメント