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();
};
相关推荐
坚果派·白晓明7 分钟前
【鸿蒙PC三方库移植适配框架解读系列】第八篇:扩展lycium框架使其满足rust三方库适配
c语言·开发语言·华为·rust·harmonyos·鸿蒙
花间相见14 分钟前
【PaddleOCR教程01】PP-OCRv5 全面指南:从模型架构到实战部署
开发语言·r语言
小短腿的代码世界34 分钟前
Qt 股票订单撮合引擎:高频交易系统的核心心脏
开发语言·数据库·qt·系统架构·交互
大炮筒1 小时前
COCOS2DX4.0CPPWIN移植安卓踩坑总结
android
谙弆悕博士2 小时前
快速学C语言——第16章:预处理
c语言·开发语言·chrome·笔记·创业创新·预处理·业界资讯
yuan199973 小时前
基于 C# 实现的 Omron HostLink (FINS) 协议 PLC 通讯
开发语言·c#
qq_422828623 小时前
android图形学之SurfaceControl和Surface的关系 五
android·开发语言·python
如竟没有火炬4 小时前
用队列实现栈
开发语言·数据结构·python·算法·leetcode·深度优先
折哥的程序人生 · 物流技术专研4 小时前
《Java 100 天进阶之路》第17篇:Java常用包装类与自动装箱拆箱深入
java·开发语言·后端·面试
C+++Python4 小时前
C 语言 动态内存分配:malloc /calloc/realloc /free
c语言·开发语言