我是PHP和Design Patterns中的一个开始。我一直在研究令人惊叹的Head First Design模式。所以,我一直在试图将原文翻译成PHP。但是,我必须做的事情非常错误,因为它不起作用。你可以帮我吗?策略模式无效:我做错了什么?
<?php
interface FlyBehavior{
public function fly();
}
class FlyWithWings implements FlyBehavior{
public function fly(){
echo "I am flying!";
}
}
class FlyNoWay implements FlyBehavior{
public function fly(){
echo "I cannot fly!";
}
}
interface QuackBehavior{
public function quack();
}
class Quack implements QuackBehavior{
public function quack(){
echo "Quack";
}
}
class MuteQuack implements QuackBehavior{
public function quack(){
echo "Silence";
}
}
class Squeak implements QuackBehavior{
public function quack(){
echo "Squeak";
}
}
abstract class Duck{
protected $quackBehavior;
protected $flyBehavior;
public function performQuack(){
$this->$quackBehavior->quack();
}
public function performFly(){
$this->$flyBehavior->fly();
}
abstract public function display();
public function swim(){
echo "All ducks float, even decoy";
}
}
class MallardDuck extends Duck{
public function __construct(){
$this->quackBehavior=new Quack();
$this->flyBehavior=new FlyWithWings();
}
public function display(){
echo "I am real Mallard duck!";
}
}
$mallard=new MallardDuck();
$mallard->performQuack();
$mallard->performFly();
?>
当我跑我得到的错误 “未定义变量:quackBehavior” 一致 “$本 - > $ quackBehavior->嘎嘎();”里面的“抽象类鸭”。
对此有解释吗?为什么我不需要这个? – DanielTheRocketMan
谢谢!它解决了执行问题,但现在有两个与Quack类相关的“Quack”。你知道原因吗? – DanielTheRocketMan
@DanielTheRocketMan解释是[变量变量](http://www.php.net/manual/en/language.variables.variable.php) –