依赖注入如何创建类的实例?

时间:2017-06-30 23:33:17

标签: php

我在自己的课堂上使用依赖注射:

class FeedFetcher {
 protected $cache;
 function __construct(Cache $cache) {
   $this->cache = $cache;
 }
}

PHP如何在此创建对象实例:

function __construct(Cache $cache) { $cache->method(); }

如果我没有new Cache(),为什么会有效?为什么我可以调用$cache->method();无法创建缓存实例?

1 个答案:

答案 0 :(得分:0)

Cache $cacheType declaration或类型提示,声明在创建Cache对象时必须传递FeedFetcher的实例:

class FeedFetcher {
    protected $cache;

    function __construct(Cache $cache) { $cache->method(); }
}

// create a Cache object
$c = new Cache;
// pass Cache object to constructor of FeedFetcher
$f = new FeedFetcher($c);

如果您没有传递Cache类型的对象,则会产生错误:

  

致命错误:未捕获的TypeError:传递给FeedFetcher()的参数1必须是Cache的实例,none / null /其他给定的。