PHPにおける依存性注入の使い方


  1. コンストラクタインジェクション: コンストラクタインジェクションは、依存関係をクラスのコンストラクタパラメータとして受け取る方法です。以下は、例です。
class DatabaseConnection {
    private $connection;
    public function __construct(PDO $pdo) {
        $this->connection = $pdo;
    }
// データベース操作メソッドなど...
}
$pdo = new PDO('mysql:host=localhost;dbname=mydb', 'username', 'password');
$database = new DatabaseConnection($pdo);
  1. セッターインジェクション: セッターインジェクションは、依存関係をクラスのセッターメソッドを介して注入する方法です。以下は、例です。
class Logger {
    private $logFile;
    public function setLogFile(string $file) {
        $this->logFile = $file;
    }
// ログ出力メソッドなど...
}
$logger = new Logger();
$logger->setLogFile('app.log');
  1. インターフェース注入: インターフェース注入は、依存関係をインターフェースを介して注入する方法です。以下は、例です。
interface PaymentGateway {
    public function processPayment(float $amount);
}
class PayPalPaymentGateway implements PaymentGateway {
    public function processPayment(float $amount) {
        // PayPalでの支払い処理
    }
}
class Shop {
    private $paymentGateway;
    public function __construct(PaymentGateway $gateway) {
        $this->paymentGateway = $gateway;
    }
    public function checkout(float $amount) {
        $this->paymentGateway->processPayment($amount);
    }
}
$gateway = new PayPalPaymentGateway();
$shop = new Shop($gateway);
$shop->checkout(100.0);

これらは、依存性注入の一部の例です。依存性注入を使用することで、コードのテスト容易性が向上し、コンポーネントの再利用性が高まります。さらに、依存性の解決には、コンテナ(DIコンテナ)を使用することも一般的ですが、それについては別の記事で詳しく説明します。

以上が、PHPにおける依存性注入の使い方とコード例の紹介です。依存性注入を活用することで、柔軟なアプリケーションの設計とテスト容易性の向上が期待できます。