PHP の依存性注入 (Dependency Injection、略して DI)

1. 依存とは何ですか?

注文クラス Order と在庫クラス Inventory があるとします。注文クラスには、品目の在庫状況を確認して在庫を更新するための在庫クラスが必要です。この場合、注文クラスは在庫クラスに依存します。注文クラスは在庫クラスのメソッドを呼び出して、特定の在庫チェックと更新操作を完了します。

<?php
// 定义库存类
class Inventory {
    public function checkStock($productId) {
        // 检查库存逻辑
        // ...
        return true;
    }

}
// 定义订单类
class Order {
    public function placeOrder($productId) {
        // 创建库存对象
         $inventory = new Inventory();
        if ($inventory->checkStock($productId)) {
            echo "可以下单";
        } else {
            echo "库存不足,无法下单!";
        }
    }
}


$order = new Order();
// 调用订单方法下单
$order->placeOrder(123456);
2.注射とは何ですか? 

インジェクションとは、外部手段を通じてオブジェクトの依存関係をオブジェクトに渡すプロセスを指します。インジェクションは、コンストラクターインジェクション、プロパティインジェクション、メソッドインジェクションの 3 つの形式に分類できます。

// 定义订单类
class Order {
    private $inventory;

    public function __construct(Inventory $inventory) {
        $this->inventory = $inventory;
    }

    public function placeOrder($productId) {
        if ($this->inventory->checkStock($productId)) {
            $this->inventory->updateStock($productId);
            echo "订单已成功下单!";
        } else {
            echo "库存不足,无法下单!";
        }
    }
}
// 创建库存对象
$inventory = new Inventory();
// 创建订单对象并注入库存对象
$order = new Order($inventory);
// 调用订单方法下单
$order->placeOrder(123456);
3. 依存性注入とは何ですか?

 依存関係の注入とは、オブジェクトの依存関係をオブジェクト自体から別の場所に移動することを指し、外部コンテナーがこれらの依存関係を管理および注入します。つまり、オブジェクトは依存関係の作成や検索を担当しなくなり、コンストラクター、メソッド パラメーター、またはプロパティ インジェクションを通じて依存関係を受け取ります。この利点は、オブジェクトがより独立し、再利用可能で、テストが容易になることです。これは、オブジェクトが自分自身の責任だけに集中する必要があり、依存関係の作成方法や管理方法を気にする必要がないためです。

<?php
// 定义库存类
class Inventory {
    public function checkStock($productId) {
        // 检查库存逻辑
        // ...
        return true;
    }

}
// 定义订单类
class Order {
    private $inventory;

    public function __construct(Inventory $inventory) {
        $this->inventory = $inventory;
    }

    public function placeOrder($productId) {
        if ($this->inventory->checkStock($productId)) {
            $this->inventory->updateStock($productId);
            echo "订单已成功下单!";
        } else {
            echo "库存不足,无法下单!";
        }
    }
}
// 创建库存对象
$inventory = new Inventory();
// 创建订单对象并注入库存对象
$order = new Order($inventory);
// 调用订单方法下单
$order->placeOrder(123456);

おすすめ

転載: blog.csdn.net/weixin_39934453/article/details/131962022