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();
};
相关推荐
雨声不在2 分钟前
android 动画掉帧
android
在多学一点1 小时前
MYSQL第二次作业
android·数据库·mysql
yeccheng1 小时前
MySQL 索引超详解:从底层 B+ 树到面试高频考点
java·开发语言·jvm·mysql·面试
联犀1 小时前
纯 Go 的 CAD 开源库 go-cad:直接解析 DWG/DXF,现在也能导出 PDF
开发语言·golang·pdf
骑着蜗牛撵大象3271 小时前
MySQL 8.0 迁移后 SQL 变慢:执行计划里 3 类被忽略的成本差异
android·数据库·sql·mysql·优化器·执行计划
我叫张土豆2 小时前
Android 14+ 模拟器抓包实录:把 Burp CA 装成系统 CA,让 targetSdk≥34 的 App 乖乖解密
android
zjxtxdy2 小时前
C++面向对象程序开发-类与对象
开发语言·c++
测试界的小码农4 小时前
【Linux 命令实战(03):文件创建、复制、移动与删除,掌握 touch、mkdir、cp、mv、rm】
linux·服务器·php
qq_406981034 小时前
c++拷贝构造函数
开发语言·c++
爱喝雪碧的可乐4 小时前
MATLAB
开发语言·算法·matlab