Injeção de Dependência do PHP (Injeção de Dependência, DI para abreviar)

1. O que é dependência?

Suponha que haja uma classe de pedido Order e uma classe de inventário Inventory. A classe de pedido precisa da classe de estoque para verificar o status do estoque do item e atualizar o estoque. Nesse caso, a classe de ordem depende da classe de estoque. A classe de pedido chamará o método da classe de inventário para concluir operações específicas de verificação e atualização de inventário

<?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. O que é injeção? 

Injeção refere-se ao processo de passar as dependências de um objeto para o objeto através de meios externos. A injeção pode ser dividida em três formas: injeção de construtor, injeção de propriedade e injeção de método.

// 定义订单类
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. O que é injeção de dependência?

 A injeção de dependência refere-se a mover as dependências de um objeto do próprio objeto para outro local, e o contêiner externo gerencia e injeta essas dependências. Ou seja, o objeto não é mais responsável por criar ou encontrar dependências, mas recebe dependências por meio de construtores, parâmetros de métodos ou injeção de propriedades. A vantagem disso é que torna os objetos mais independentes, reutilizáveis ​​e fáceis de testar, pois eles só precisam focar em suas próprias responsabilidades e não se preocupam em como criar ou gerenciar dependências.

<?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);

Acho que você gosta

Origin blog.csdn.net/weixin_39934453/article/details/131962022
Recomendado
Clasificación