如何在课堂上使用依赖注入?

时间:2017-08-27 15:33:10

标签: php

我有DI ImapClient $imapClient的自定义类:

class MailBoxCleaner
{
  public function __construct(ImapClient $imapClient)
  {
  }
}

还有一个门面课:

class ImapConnection {

  public function __construct()
  {
     return new ImapClient();
  }
}

我尝试使用它:

$MailBoxCleaner = new MailBoxCleaner(new ImapConnection());

但它不起作用。

1 个答案:

答案 0 :(得分:1)

构造函数永远不会返回任何数据。

你必须创建一个getter方法来返回你的ImapClient类的实例,所以你将它注入到另一个类中。

根据您的代码:

class ImapConnection {
  private $imapClient = null;

  public function __construct()
  {
     $this->imapClient = new ImapClient();
  }

  public function getImapClient(){
    return $this->imapClient;
  }
}

你可以注射:

$idObj = new ImapConnection(); // Instanciation

$MailBoxCleaner = new MailBoxCleaner($idObj->get());

您还可以使用“模式”:

class ImapConnection {
  private $instance = null;
  private $imapClient = null;

  private function __construct()
  {
     $this->imapClient = new ImapClient();
  }

  public static function getImapClient(){
    if(is_null($this->instance){
        $this->instance = new ImapConnection();
    }
    return $this->instance->get();
  }


  private function get(){
    return $this->imapClient;
  }
}

然后,您可以在代码中使用:

$MailBoxCleaner = new MailBoxCleaner(ImapConnection::getImapClient());