インターフェース

PHPにおける「インターフェース(interface)」とは、クラスに共通のメソッドの定義を強制するための設計図のような存在です。インターフェースは、オブジェクト指向プログラミングにおいて**ポリモーフィズム(多態性)**を実現するために非常に重要です。


インターフェースの基本的な特徴

  1. メソッドの定義のみを記述

    • インターフェースでは、メソッドの「名前」「引数」「戻り値の型」だけを宣言します。

    • 実際の処理(本体)は記述しません。

  2. クラスはimplementsキーワードでインターフェースを実装

    • クラスは、そのインターフェースで定義されたすべてのメソッドを必ず実装する必要があります。

  3. 多重実装が可能

    • PHPでは複数のインターフェースを同時に実装することが可能です(クラスの多重継承は不可ですが、インターフェースの多重実装は可能)。


インターフェースの構文

php
interface Logger { public function log(string $message): void; } class FileLogger implements Logger { public function log(string $message): void { echo "ログ: " . $message; } }

この例では、LoggerインターフェースをFileLoggerクラスが実装しています。インターフェースで定義されたlog()メソッドは、FileLoggerクラス内で必ず実装しなければなりません。


インターフェースの主な用途

  1. 設計の統一

    • 異なるクラスに共通のメソッド構造を持たせることで、コードの一貫性を保ちます。

  2. 疎結合の実現

    • クラス同士の依存を減らし、柔軟で保守性の高いコードを実現します。

  3. ポリモーフィズムの活用

    • 複数のクラスで同一インターフェースを実装することで、同じ処理構文で異なるクラスのインスタンスを扱うことが可能になります。


継承との違い

項目 継承(extends) インターフェース(implements)
メソッドの本体 あり なし
多重適用 単一継承のみ 複数インターフェース実装可能
属性(プロパティ) 継承可能 宣言不可(メソッドのみ)

実践的な活用例

php
interface PaymentGateway { public function charge(int $amount): bool; } class PayPal implements PaymentGateway { public function charge(int $amount): bool { // PayPalでの決済処理 return true; } } class Stripe implements PaymentGateway { public function charge(int $amount): bool { // Stripeでの決済処理 return true; } } function processPayment(PaymentGateway $gateway, int $amount) { if ($gateway->charge($amount)) { echo "決済成功"; } else { echo "決済失敗"; } }

このように、インターフェースを使えばPayPalでもStripeでも、同じprocessPayment()関数で扱うことが可能になります。

生成日:2025/05/03