【发布时间】:2015-03-18 17:10:30
【问题描述】:
我想知道。我在 Symfony2 TranslationLoader 类中找到了这个:
public function addLoader($format, LoaderInterface $loader)
{
$this->loaders[$format] = $loader;
}
我发现LoaderInterface 只有一种方法。但是我们怎么知道这个接口的实现呢?这是接口注入?
【问题讨论】:
-
如果您正在“注入”接口 - 那么您仅依赖于事实,即您的参数遵循合同,前提是该接口。接口的整个想法就是契约——你不应该知道具体的实现细节,甚至不知道那个实现是什么
-
@AlmaDo,所以如果我理解你的话,如果我的 SomeClass 会实现 LoaderInterface,然后我会调用 addLoader($format, SomeClass $loader) 就可以了?
-
如果你有一个实现
LoaderInterface的类,它必须包含接口声明的所有方法,在这种情况下只是public function load($resource, $locale, $domain = 'messages')(github.com/symfony/Translation/blob/master/Loader/…)。接口只是一个空类,它说明实现它的任何类中必须存在哪些方法。 -
@Qoop,我知道接口是什么,我不知道 TranslationLoader 类将如何知道 LoaderInterface $loader load() 方法背后隐藏的实现,但现在我认为它对我来说更清楚了。
标签: php symfony interface interface-injection