- コンストラクタインジェクション: コンストラクタインジェクションは、依存関係をクラスのコンストラクタパラメータとして受け取る方法です。以下は、例です。
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);
- セッターインジェクション: セッターインジェクションは、依存関係をクラスのセッターメソッドを介して注入する方法です。以下は、例です。
class Logger {
private $logFile;
public function setLogFile(string $file) {
$this->logFile = $file;
}
// ログ出力メソッドなど...
}
$logger = new Logger();
$logger->setLogFile('app.log');
- インターフェース注入: インターフェース注入は、依存関係をインターフェースを介して注入する方法です。以下は、例です。
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における依存性注入の使い方とコード例の紹介です。依存性注入を活用することで、柔軟なアプリケーションの設計とテスト容易性の向上が期待できます。