<?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);
}
}