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

时间:2015-05-18 06:35:02

标签: php strategy-pattern

我运行脚本时

<?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();

而不是之前。

有人知道我做错了什么吗?提前谢谢了。

赫伯特

1 个答案:

答案 0 :(得分:2)

在PHP中,您可以使用__construct,如果您愿意,可以将构造函数命名为与类相同(不是100%确定是否适用于所有版本)。
所以你遇到的问题是你的Brake类实现了一个构造函数而不是你认为它实现的方法(brake)。

现在,人们可能会认为Brake()brake()之间存在差异,但没有。在php中,方法/函数名称不区分大小写,因此它们是相同的......

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

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

否则,您可能会收到Redefining already defined constructor错误。