依赖注入实现邮件发布

依赖注入

1.目录树

/Di
/--comment.php
/--EmailSenderInterface.php
/--Gmail.php
/--index.php
/--Qmail.php

1.index.php
<?php
/**
 * 自动加载类
 */
namespace Di;

class Load
{
    public static function run()
    {
        spl_autoload_register([self::class, 'loadClass'], false, true);
    }

    public static function loadClass($className)
    {
        $prefix = __NAMESPACE__ . '\\';
        $prefixLength = strlen($prefix);

        $file = '';

        if (0 == strpos($className, $prefix)) {
            $file =  explode('\\', substr($className, $prefixLength));
            $file = implode(DIRECTORY_SEPARATOR, $file) . '.php';
        }

        $path = __DIR__ . DIRECTORY_SEPARATOR . $file;
        if (is_file($path)) {
            require_once $path;
        }
    }
}

$load = new Load();
$load::run();

$comment = new Comment(Gmail::getInstance());
// $comment = new Comment(Qmail::getInstance());

var_dump($comment->save());
2.comment.php
<?php
namespace Di;

class Comment
{
    public $mail;
    public function __construct(EmailSenderInterface $mail)
    {
        $this->mail = $mail;
    }

    public function save()
    {
       return $this->mail->sendMail();
    }

}

3.EmailSenderInterface.php
<?php
namespace Di;

interface EmailSenderInterface
{
    public function sendMail();
}
4.Gmail.php
<?php
namespace Di;

class Gmail implements EmailSenderInterface
{
    private static $gmail;

    public function sendMail()
    {
        return '124';
    }

    public static function getInstance()
    {
        if (!self::$gmail instanceof self)
        {
            self::$gmail = new self();
        }
        return self::$gmail;
    }

}
5.Qmail.php
<?php
namespace Di;

class Qmail implements EmailSenderInterface
{
    private static $qqmail;

    public function sendMail()
    {
        echo 'QQmail';
        return 'send QQmail';
    }

    public static function getInstance()
    {
        if (!self::$qqmail instanceof self)
        {
            self::$qqmail = new self();
        }
        return self::$qqmail;
    }

}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,026评论 19 139
  • 今天的晨读文章,是有关改善视力的3个方法。前两个方法“拍打法”和“按摩法”是通过用手拍打和按摩的方法促进血液循环,...
    聪聪2017阅读 601评论 0 5
  • 最近对盒子口金是越来越喜欢,看着不大,其实容量很大的,苹果手机也是能装下的。 任何事情并没有想象的复杂,也没有想象...
    叶样悠阅读 493评论 4 3
  • 正值秋色,清照在庭院中荡秋千,凝寒的秋露倚靠在那几瓣自身难保的春花上。 久罢,薄汗沾湿衣裳,秋千旁有一棵梅树,冬...
    娮yan阅读 172评论 0 0
  • 20:10 卢卡斯影业 卢卡斯影业有限公司是乔治·卢卡斯于1971年在加州旧金山建立的美国电影公司。目前,卢卡斯担...
    前端小胖阅读 1,372评论 0 0