为了账号安全,请及时绑定邮箱和手机立即绑定

接口依赖注入

接口依赖注入

PHP
Helenr 2021-12-24 09:52:10
我正在研究接口和依赖注入。到目前为止,我知道接口的实现做了什么,但是我错过了一些东西并且在花了很多时间阅读和观看视频之后无法通过它。我有一个很好的例子,它使用不同的邮件服务,比如 PHPMailer 或 OtherMailerService,它们是第三方库。我不会在我的类(SomeClass)中实例化邮件服务,而是将一个实例注入到构造函数中,为了使其灵活,我将使用一个接口。<?phpinterface MailerInterface {    public function send($message);}我现在可以键入提示我的类的构造函数参数来保护我的类。<?phpclass SomeClass{    public $mailer;    public function __construct(MailerInterface $mailer) {         $this->mailer = $mailer;    }    public function sendMailMessage()     {        $mailer->send($message);    }}现在这个 MailerInterface 需要在 Mailer 服务中实现,但这是第三方。而且我还需要将该函数 send() 实现到第三方中,这感觉就像我认为的不对。我花了很多时间试图获得这个概念,但它从我的脑海中溜走。我没有清楚地看到这一点,所以我的问题是如何为依赖注入设置第三方库?缺什么?
查看完整描述

1 回答

?
人到中年有点甜

TA贡献1895条经验 获得超7个赞

您无法获得第 3 方库来实现您的接口,因此您需要编写一些包装类,例如


use PHPMailer\PHPMailer\PHPMailer;


class PHPMailerWrapper implements MailerInterface {

    private $mail;


    public function __construct(PHPMailer $mail) {

        $this->mail = $mail;

        // mailer could be configured here or prior to being passed in here

    }


    public function send($message) {

        // super simple example, I don't know PHPMailer very well

        $this->mail->body = $message;

        return $this->mail->send();

    }

}

您需要为您希望支持的任何其他实现做类似的事情。


然后,您将创建这些实现之一的实例并将其传递给您的SomeClass构造函数,例如


$mailer = new PHPMailerWrapper($phpMailerInstance);

$someObj = new SomeClass($mailer);


查看完整回答
反对 回复 2021-12-24
  • 1 回答
  • 0 关注
  • 229 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号