PHP之依赖注入(Dependency Injection,简称DI)

34 篇文章 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);
二、什么叫注入? 

注入(Injection)是指将一个对象的依赖关系通过外部方式传递给该对象的过程。注入可以分为构造函数注入(Constructor Injection)、属性注入(Property Injection)和方法注入(Method Injection)三种形式。

// 定义订单类
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);
三、什么叫 依赖注入?

 依赖注入是指将一个对象的依赖关系从该对象自身移动到另一个地方,并由外部容器来管理和注入这些依赖。即,对象不再负责创建或查找依赖关系,而是通过构造函数、方法参数或者属性注入的方式接收依赖。这样做的好处是,使得对象更加独立、可复用和易于测试,因为它们只需关注自身的职责,而不用关心如何创建或管理依赖。

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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

PHP隔壁老王邻居

啦啦啦啦啦

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值