为什么这个功能不起作用?

时间:2016-02-04 04:15:53

标签: php function oop

我已经声明了beats功能并尝试使用它。 var_dump(is_a($sci, 'Scissors'))var_dump($roc->beats($sci))之间有什么区别?当我运行此代码时,第一个var_dump返回true,第二个返回false。我希望两者都回归真实。

abstract Class Option
{
    private $beats;

    public function beats($opponentsChoice)
    {
        return is_a($opponentsChoice, $this->beats);
    }

}

Class Rock extends Option
{
    private $beats = 'Scissors';
}

Class Paper extends Option
{
    private $beats = 'Rock';
}

Class Scissors extends Option
{
    private $beats = 'Paper';
}

$roc = new Rock;
$pap = new Paper;
$sci = new Scissors;

var_dump(is_a($sci, 'Scissors'));

var_dump($roc->beats($sci));

1 个答案:

答案 0 :(得分:0)

问题在于您的private变量。

private个变量的范围仅限于它们所定义的类。Option::$beats是一个与Rock::$beats不同的变量。

如果您将变量更改为protected,那将会有效,因为类层次结构的所有成员都将共享protected个变量(和方法)。