如何在PHP(Laravel)中使用多个接口实现?

时间:2015-08-13 21:09:16

标签: php oop laravel interface

我是所有这些东西的新手。我的意思是我理解OOP是如何工作的但不是真的。我想每个新手开发者都会在某个时候到我的位置。所以我一直在经历杰弗里令人敬畏的拉拉斯特斯,以了解这些东西是如何运作的。

所以我刚刚完成了关于接口的课程,他解释说“总是使用接口,从不使用实现”并对我有意义,但我对最后一个例子有疑问,如下所示:

Interface example

他解释了CanBeFiltered接口是如何有用的,我知道如果我将此接口传递给控制器​​的构造函数,Laravel将在幕后解析我选择的特定过滤器并注入它然后我将能够使用它。或者我可以这样手动完成:

<?php

class UserController{

    protected $canBeFiltered;

    public function __construct(CanBeFiltered $canBeFiltered)
    {
        $this->canBeFiltered = $canBeFiltered;
    }

    public function show()
    {
        return $this->canBeFiltered->filter();
    }
}

$controller = new UserController(new Favorited);

这基本上会应用favorited过滤器,但如果我想应用多个过滤器,例如我是否要应用favoritedunwatched,该怎么办?那我该怎么办?

此外,Laravel的IoC容器会自动为我解析依赖关系,以便如何将不同的过滤器传递给不同的控制器?

1 个答案:

答案 0 :(得分:2)

每个接口可以有不同的实现,因此当您在构造函数中键入提示依赖项时,laravel将要求服务容器查明该接口是否存在任何绑定实现。
它的开发人员必须指定必须使用哪些实现来解析接口依赖关系,而laravel也支持 Contextual Binding ,这意味着你可能有两个使用相同接口的类,但是你希望为每个类注入不同的实现。 有关详细信息,请查看documentation