简单策略模式返回不需要的回声输出


Simple strategy pattern returns unwanted echo output

当我运行脚本时

<?php
interface IBrakeBehaviour {
    public function brake();
}
class Brake implements IBrakeBehaviour {
    public function brake() {
        echo "Simple Brake applied.";
    }
}
class BrakeWithABS implements IBrakeBehaviour {
    public function brake() {
        echo "Brake with ABS applied.";
    }
}
class Car {
    private $_brakeBehavior;
    public function __construct(IBrakeBehaviour $brakeBehavior)
    {
        $this->_brakeBehavior = $brakeBehavior;
    }
    public function brake() {
        $this->_brakeBehavior->brake();
    }
}
$bmw = new Car(new Brake());
$audi = new Car(new BrakeWithABS());

它会自动回复"简单刹车"。但当我执行时,应该会出现这个消息

$bmw->brake(); or $audi->brake();

而不是以前。

有人知道我做错了什么吗?非常感谢。

Herbert

在PHP中,您既可以使用__construct,也可以根据需要将构造函数命名为与类相同的名称(不能100%确定这是否适用于所有版本(
因此,您遇到的问题是,Brake类实现了一个构造函数,而不是您认为它实现的方法(brake(。

现在,人们可以认为Brake()brake()之间会有区别,但没有。在php中,方法/函数名称不区分大小写,所以它们是相同的。。。

如何绕过这个问题
如果在实现brake函数之前将构造函数实现为__construct,那么它应该可以工作,即:

class Brake {
  public function __construct() {} // First
  public function Brake() {}       // Then this
}

否则可能会出现Redefining already defined constructor错误。