php 依赖注入

<?php

//比如说有个发送短信的需求,有两家服务,一家阿里,一家腾讯

//都是得发短信,先写个抽象类
abstract class SendSms{
    abstract public function send($sms);
}

//阿里的服务封装
class Al extends SendSms{
//这里还有些引入阿里云的sdk,配置项的操作...,下面的腾讯类一样

    public function send($sms){
        echo "这是用--阿里云--服务发送的短信:{$sms}\n";
    }
}

//腾讯云服务的封装
class Tx extends SendSms{
    public function send($sms){
        echo "这是用--腾讯云--服务发送的短信:{$sms}\n";
    }
}

class User{
    private $server;

    public function __construct(SendSms $sendSms)
    {
        $this->server = $sendSms;
    }

    public function send($sms){
        $this->server->send($sms);
    }
}

//User类想发短信,就得通过阿里云或者腾讯云的服务,这叫依赖;
//不用在User类中创建对象,而是在实例化User类的时候传入阿里云或者腾讯云的类,这叫注入;
//好处就在于,不用管阿里或者腾讯类内部是怎么实现的,只要拿来用就可以,反正他俩都是继承的抽象类,肯定有send方法

(new User(new Al))->send('您的可用余额不足,请努力工作!');

-------------------------------------------分割线--------------------------------------------

//比较原始的写法,像这种就比较坑了,一开始用阿里云的服务,如果后面改成腾讯云的,send方法里的代码都得改
class User1{
    public function send($sms){
        //引入阿里云sdk
        include 'al.php';
        $al = new al();
        //阿里云的秘钥等配置
        $conf = [
            'alkey' => '1234567',
            'alsecret' => '7654321',
            //...
        ];
        //通过阿里云服务发送短息
        $al->send($sms);
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值