我运行脚本时
<?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();
而不是之前。
有人知道我做错了什么吗?提前谢谢了。
赫伯特
答案 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
错误。