美文网首页
PHP 依赖注入

PHP 依赖注入

作者: 豆豆_06fa | 来源:发表于2019-02-13 15:16 被阅读0次

说这个话题之前先讲一个比较高端的思想--'依赖倒置原则'

"依赖倒置是一种软件设计思想,在传统软件中,上层代码依赖于下层代码,当下层代码有所改动时,上层代码也要相应进行改动,因此维护成本较高。而依赖倒置原则的思想是,上层不应该依赖下层,应依赖接口。意为上层代码定义接口,下层代码实现该接口,从而使得下层依赖于上层接口,降低耦合度,提高系统弹性"

上面的解释有点虚,下面我们以实际代码来解释这个理论

比如有这么条需求,用户注册完成后要发送一封邮件,然后你有如下代码:

先有邮件类'Email.class.php'

classMail{

    publicfunction send()

    {

        /*这里是如何发送邮件的代码*/    }

}

然后又注册的类'Register.class.php'

class Register{

    private$_emailObj;

    publicfunction doRegister()

    {

        /*这里是如何注册*/$this->_emailObj =newMail();

        $this->_emailObj->send();//发送邮件    }

}

然后开始注册

include'Mail.class.php';

include'Register.class.php';

$reg=new Register();

$reg->doRegister();

看起来事情很简单,你很快把这个功能上线了,看起来相安无事... xxx天过后,产品人员说发送邮件的不好,要使用发送短信的,然后你说这简单我把'Mail'类改下...

又过了几天,产品人员说发送短信费用太高,还是改用邮件的好...  此时心中一万个草泥马奔腾而过...

这种事情,常常在产品狗身上发生,无可奈何花落去...

以上场景的问题在于,你每次不得不对'Mail'类进行修改,代码复用性很低,高层过度依赖于底层。接下来,我们就考虑'依赖倒置原则',让底层继承高层制定的接口,高层依赖于接口。

<?php

interface Mail

{

    public function send();

}

class Email implements Mail{

    public function send()

    {

        //发送Email

        echo 'i can sent mail<br>';

    }

}

class SmsMail implements Mail

{

    public function send()

    {

        //发送短信

        echo 'i can send info<br>';

    }

}

class Register

{

    public $obj;

    public function __construct($mailObj)

    {

        $this->obj =  $mailObj;

    }

    public function doRegister()

    {

        $this->obj->send();//发送信息

    }

}

/* 此处省略若干行 */

$emailObj = new Email();

$smsObj = new SmsMail();

$reg = new Register($emailObj);

$reg->doRegister();//使用email发送

$reg1 = new Register($smsObj);

$reg1->doRegister();//使用短信发送

/* 你甚至可以发完邮件再发短信 */

?>

相关文章

  • 依赖注入

    依赖注入(DI)在PHP中的实现 什么是依赖注入? IOC:英文全称:Inversion of Control,中...

  • PHP 依赖注入

    说这个话题之前先讲一个比较高端的思想--'依赖倒置原则' "依赖倒置是一种软件设计思想,在传统软件中,上层代码依赖...

  • 快速了解PHP中的(DI)依赖注入(转载)

    什么是依赖注入?本篇文章带大家了解一下PHP中的依赖注入,介绍一下依赖注入出现的原因、依赖注入的应用,希望对大家有...

  • 依赖注入实现邮件发布

    依赖注入 1.目录树 /Di/--comment.php/--EmailSenderInterface.php/-...

  • php 依赖注入的理解

    PHP 依赖注入容器实现 w3c-PHP7中Closure :: call使用示例 php手册-Closure::...

  • Laravel学习笔记

    服务提供,依赖自动注入 php artisan make:provider FoodProvider #创建自己...

  • PHP的依赖注入

    闲来无事,今天兴致来了 ,看了看依赖注入,写了以下一段代码,不知道算不算依赖注入,自我感觉挺方便的,但是又说不上来...

  • PHP 依赖注入容器

    介绍 使用 PHP 的反射类 ReflectionClass,创建容器方便管理依赖注入。 代码 创建 digita...

  • 12,关于PHP依赖注入、对象序列化、Trait的使用心得

    依赖注入 PHP依赖注入时,在方法定义参数注入类型时,可以用接口作为提示,也可用抽象类作为提示 对象序列化 如上,...

  • 依赖注入

网友评论

      本文标题:PHP 依赖注入

      本文链接:https://www.haomeiwen.com/subject/baldeqtx.html