前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >PHP依赖注入是什么?

PHP依赖注入是什么?

作者头像
袁某人
发布2021-12-28 09:21:42
9270
发布2021-12-28 09:21:42
举报
文章被收录于专栏:袁某人

PHP依赖注入是什么?

本文最后更新时间超过30天,内容可能已经失效。

参考文献:http://blog.kaiot.xyz/read/60.html

把有依赖关系的类放进容器中,解析出这些类的实例,就是依赖注入,目的是实现类的解耦。

实例:Class A中用到了Class B的对象 bObject,普通情况下,需要在类A的代码中显示的new出一个B的对象。采用依赖注入后,A的代码只需要定义一个私有的B对象,不需要直接new 来获取这个对象,而是通过相关容器控制程序来将B的对象在外部new出来并注入到A类的引用中。

示例代码:

代码语言:javascript
复制
<?php
class A{
    protected $info;

    // $b 为实例化的b
    public function __construct($b){
        $this->info = $b;
    }

    public function a(){
        // 直接调用b中的方法
        return $this->info->b();
    }
}

class B{
    public function __construct(){
    }

    public function b(){
        return 'class b function b';
    }
}

$b = new B();
$a = new A($b);
$c = $a->a();
var_dump($c);

以上就是个简单的依赖注入,但有可能类B中b方法改名为c了,那类A中调用a方法时触发的b方法同样要修改为c,还是进入了上面的怪圈中,稍有变动就要改动很多有关联的内容。

接口类

接口类特点:

  • 接口的方法必须公开
  • 接口的方法默认是抽象的,故不需要在方法名前加abstract
  • 接口可以定义常量,但不能有成员属性,常量定义和用法和类中常量一样
  • 类可以实现多个接口
  • 接口也可继承接口

实例代码:

代码语言:javascript
复制
<?php
class A{
    protected $info;

    // $b 为实例化的b
    public function __construct($b){
        $this->info = $b;
    }

    public function a(){
        // 直接调用b中的方法
        return $this->info->b();
    }
}
// 接口类
interface B{
    // 抽象方法,没有具体逻辑
    public function b();
}

class C implements B{
    public function b(){
        return 'class c function B';
    }
}

class D implements B{
    public function b(){
        return 'class d function b';
    }
}

$c = new C();
$a = new A($c);
$c = $A->a();
var_dump($c);

在此代码中,实例化A时,不管传入C的实例或者D的实例都不影响类A中的a方法调用注入对象的b方法(此方法的方法名在抽象类中定义)

- THE END -

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-09-09 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • PHP依赖注入是什么?
    • 接口类
    相关产品与服务
    容器服务
    腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档