PHP之依赖注入

依赖注入

解释

依赖注入 (DI)其实本质上是指对类的依赖通过构造器完成自动注入通俗来说,就是你当前操作一个类,但是这个类的某些方法或者功能不是单单只靠这个类就能完成的,而是要借助另一个类的才能完成的最直接的标志就是传参数据为对象的时候。严格来说,你想在另一个类中操作另一个类,这两个类之间形成了相互依赖关系,传参的方式叫注入

简单的依赖注入

  • 就是通过构造函数去注入
php 复制代码
<?php

class container
{
    private $adapter;

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

高阶的依赖注入

php 复制代码
<?php

class container
{
    public
        $instance = [];

    public
    function __set($name, $value)
    {
        $this->instance[$name] = $value;
    }
}

$container = new container();
$container->adapter = new adapter();

依赖注入的容器应用

php 复制代码
<?php

class container
{
    public $instance = [];

    public function __set($name, $value)
    {
        $this->instance[$name] = $value;
    }
}

class adapter
{
    public $name = '我是调度器';
}

$container = new container();
$container->adapter = new adapter();

class autofelix
{
    private $container;

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

    public function who($class)
    {
        return $this->container->instance[$class]->name;
    }
}

$autofelix = new autofelix($container);
$who = $autofelix->who('adapter');
var_dump($who); //我是调度器

进一步优化

  • 如果直接使用就是会将控制的容器中的内容都重新初始化一遍
  • 如果加上闭包就是可以等到使用的时候再初始化减少不必要的浪费
php 复制代码
<?php
$container = new container();
$container->adapter = new adapter(); //高阶优化
$container = new container();
$container->adapter = function () {
    return new adapter();
};
相关推荐
企业解惑小能手-域智盾系统1 分钟前
内网监控软件策略不生效、日志缺失?一套从现象到根因的排查框架
开发语言·php·域智盾
1024奇点5 分钟前
【仓颉语言入门 · 第二篇 第 10 课】
开发语言·数据库·ide·mysql·开源
布莱克6059 分钟前
A* 算法详解:从原理到实现
开发语言·c++·算法
多弗朗皮卡丘10 分钟前
C++ 智能指针
开发语言·c++·c++11·智能指针
数据狐(Datafox)13 分钟前
一文读懂京东商品详情API:返回字段解读与 JSON 样例
java·开发语言·数据库·windows·json
2501_9159090621 分钟前
Ipa Guard 防护上架,混淆、重签名和回归测试怎么做
android·ios·小程序·https·uni-app·iphone·webview
小成2023032026532 分钟前
C++~02运算符重载
开发语言·c++
emfuture41 分钟前
龙芯2K300 PLC 在拉丝机收线系统改造中的应用:硬件选型、张力控制与国产化替代实践
java·开发语言·智能制造·plc·国产化替代
geovindu1 小时前
rust: Mediator Pattern
开发语言·后端·设计模式·rust·中介者模式·行为模式
码点1 小时前
Android ANR 全解析 与 traces 分析实战
android