【问题标题】:How use multiple implementation of an Interface in PHP (Laravel)?如何在 PHP (Laravel) 中使用多个接口实现?
【发布时间】:2015-08-13 21:09:15
【问题描述】:

我对所有这些东西都很陌生。我的意思是我了解 OOP 是如何工作的,但不是真的。我想每个新手开发人员都曾在某个时候出现在我的位置。所以我一直在浏览 Jeffrey 的很棒的 Laracasts 来了解这些东西是如何工作的。

所以我刚刚完成了关于接口的课程,他解释了“始终使用接口,从不使用实现”,这对我来说很有意义,但我对最后一个示例有疑问:

他解释了 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 容器会自动为我解决依赖关系,那么如何将不同的过滤器传递给不同的控制器呢?

【问题讨论】:

  • 使用when()-&gt;needs()-&gt;give()。见here

标签: php oop laravel interface


【解决方案1】:

每个接口可以有不同的实现,所以当你在构造函数中键入提示依赖项时,laravel 会询问服务容器是否有该接口的任何绑定实现。
开发人员必须指定必须使用哪些实现来解决接口依赖关系,并且 laravel 还支持 Contextual Binding 这意味着您可能有两个使用相同接口的类,但您希望将不同的实现注入到每个类中。 欲了解更多信息,请查看documentation

【讨论】:

  • 是的,但我如何仍然在同一个类中使用两个过滤器?
  • 我不明白,为什么要使用 2 个过滤器,但是如果您需要两个过滤器,则在您的接口中定义它们,其他将实现该接口的类可以轻松实现这两个过滤器.您还可以使用 PHP 特征来拥有尽可能多的过滤器。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-01-24
  • 2011-03-03
  • 2011-01-18
  • 2021-09-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多