当我运行脚本时
<?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
错误。