php中aware/capable接口的用途是什么?

php中aware/capable接口的用途是什么?,php,symfony,interface,Php,Symfony,Interface,我在Symfony和其他项目中看到了这些接口。通常,它们只包含一个setter和一个getter,并且它们包含一个必须从接口实现方法的类 不过,我看不出这里有什么附加值。为什么不简单地添加方法,而不是使用4-5个实现,因为您希望向现有类添加有意识和有能力的接口 是的,你可能很容易看到一个类能够做什么,但是你也可以从方法上看到这一点,它给了你更多的接口,在我看来,这些接口并没有真正添加什么 有人能给我解释一下为什么人们在PHP中使用这些吗?我知道他们可能在Java中占有一席之地(我认为它起源于Sp

我在Symfony和其他项目中看到了这些接口。通常,它们只包含一个setter和一个getter,并且它们包含一个必须从接口实现方法的类

不过,我看不出这里有什么附加值。为什么不简单地添加方法,而不是使用4-5个实现,因为您希望向现有类添加有意识和有能力的接口

是的,你可能很容易看到一个类能够做什么,但是你也可以从方法上看到这一点,它给了你更多的接口,在我看来,这些接口并没有真正添加什么


有人能给我解释一下为什么人们在PHP中使用这些吗?我知道他们可能在Java中占有一席之地(我认为它起源于Spring?)。但是我看不到这里的价值。

在Symfony框架中,containerWareInterface用于“标记”类需要容器。特别是,控制器可以选择性地实现该接口

发生的情况是,当请求处理程序实例化控制器时,如果控制器实现了接口,则注入容器。可能有点小技巧,但在实践中,使用接口专门处理某些类组效果很好。一定要记录下来


我还应该指出,该框架的更高版本提供了ContainerWareTrait,它消除了实际实现setContainer方法的需要。

尝试将接口视为描述类的蓝图

我们使用接口的主要原因是它提供了交换实现的能力

当一个类实现一个接口时,它会签署一个契约,它必须提供这些在接口中定义的方法。假设有两个类实现了这个特定的接口。现在他们签订了一份合同,将提供这些方法。到现在为止,一直都还不错。现在,您可能经常听到的一个术语是“程序到接口”。如果两个类实现一个契约,我们可以随意交换它们。考虑下面的例子。

interface CarInterface
{
    public function hasName();
    public function hasEngine();
    public function accelerate();
}

class toyota{
    public function hasName(){
    //implementation
    }

    public function hasEngine(){
    //implementation
    }

    public function accelerate(){
    //implementation
    }
}

class opel{
    public function hasName(){
    //implementation
    }

    public function hasEngine(){
    //implementation
    }

    public function accelerate(){
    //implementation
    }
}
现在我们可以有一节课需要一辆车

class circuit{

protected $car;

public function __construct(CarInterface $car)
    {
        $this->car=$car;
    }

public function startRace(){
    $this->car->accelerate();
}


}
好的,我们准备好了。想象一下我们必须重新启动班级巡回赛。我们必须将一个对象传递给那个新实例,但是哪个对象呢?实现接口的任何对象。因为我们对它进行了类型转换,所以我们将其编程为一个接口,而不是具体的实现

$circuit = new circuit(new toyota);
$circuit->startRace();
后来我们需要改变它,因为我们需要一个电路来运行我们的欧宝汽车。没问题

$circuit = new circuit(new opel);
$circuit->startRace();

我们能够随意交换实现,因为我们编程到一个接口。这是主要的好处。请阅读我在这里谈论的主题,很难理解这些概念,但一旦你理解了,你就会一直使用它们。希望现在能更清楚一点。

这听起来像是在问接口的一般价值。@Carcigenicate类型暗示接口和可重用性/与具体实现分离是完全不同的。我在通用接口中看到了它的价值。我不认为连接4-5个接口来构建一个类有什么价值。我只是想澄清一下。我不知道“有意识的”或“有能力的”接口应该代表什么,但当你说“为什么不简单地添加方法…”时,听起来像是有人反对一般使用接口。如果不是这样的话,Nvm。接口是有用的,与所使用的语言无关。我们无法真正告诉您拥有这么多接口是否有用,因为这取决于您拥有的体系结构、项目的规模及其可维护性目标。这与一般的接口无关。这更多的是关于组合与继承,以及为什么有人会实现多个接口而不是单个接口。另外,这与这个问题无关。