PHP(DI)依赖注入

如梦初醒
2022-03-15 / 2 评论 / 28 阅读 / 正在检测是否收录...
温馨提示:
本文最后更新于2022年07月10日,已超过81天没有更新,若内容或图片失效,请留言反馈。

依赖注入

简单的例子

<?php


namespace App\Http\Controllers;


class AdapterController
{
    public $name = '欢迎访问依赖注入';
}

使用

<?php


namespace App\Http\Controllers;


class IndexController
{
    protected $Adapter;

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

    public function test()
    {
        return 'Hello,' . $this->Adapter->name;
    }
}

结果

Hello,欢迎访问依赖注入

高阶操作

传统的写法

<?php

/**
 * 定义了一个消息类
 * Class Message 
 */
class  Message{

  public function seed()
  {
      return 'seed email';

  }
}
/*
 * 订单产生的时候 需要发送消息
 */
class Order{

    protected $messager = '';

    function __construct()
    {
        $this->messager = new Message();

    }

    public function seed_msg()
    {

        return $this->messager->seed();

    }
}
$Order = new Order();
$Order->seed_msg();

依赖注入写法

为了约束我们先定义一个消息接口

<?php


namespace App\Http\Controllers;

/**
 * 为了约束我们先定义一个消息接口
 * Interface MessageInterface
 */

interface MessageInterface
{
    public function send();
}

有一个发送邮件的类

<?php


namespace App\Http\Controllers;
/**
 * 有一个发送邮件的类
 * Class SendEmailController
 */

class SendEmailController implements MessageInterface
{
    public function send()
    {
        return  'send email';
    }
}

新增一个发送短信的类

<?php


namespace App\Http\Controllers;

/**
 *新增一个发送短信的类
 * Class SendSMSController
 */
class SendSMSController implements MessageInterface
{
    public function send()
    {
        return 'send sms';
    }
}

订单产生的时候 需要发送消息

<?php


namespace App\Http\Controllers;
/*
 * 订单产生的时候 需要发送消息
 */

class OrderController
{
    protected $messager = '';

    function __construct(MessageInterface $message)
    {
        $this->messager = $message;

    }
    public function send_msg()
    {
        return $this->messager->send();
    }

}

调用

<?php


namespace App\Http\Controllers;


class IndexController
{
    public function test()
    {
        //我们需要发送邮件的时候
        $message = new SendEmailController();
     //将邮件发送对象作为参数传递给Order
        $Order = new OrderController($message);
        echo '触发邮件---'.$Order->send_msg().PHP_EOL;

        //我们需要发送短信的时候
        $message = new SendSMSController();
        $Order = new OrderController($message);
      echo  '触发短信---'.$Order->send_msg().PHP_EOL;
    }
}

结果

触发邮件---send email 触发短信---send sms
0

评论 (2)

取消
  1. 头像
    远航
    Windows 7 · Google Chrome

    又学到了,每天学会一点点表情

    回复
    1. 头像
      如梦初醒 作者
      MacOS · Google Chrome
      @ 远航

      大佬又来了表情

      回复