我有DI ImapClient $imapClient
的自定义类:
class MailBoxCleaner
{
public function __construct(ImapClient $imapClient)
{
}
}
还有一个门面课:
class ImapConnection {
public function __construct()
{
return new ImapClient();
}
}
我尝试使用它:
$MailBoxCleaner = new MailBoxCleaner(new ImapConnection());
但它不起作用。
答案 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());