我已经声明了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));
答案 0 :(得分:0)
问题在于您的private
变量。
private
个变量的范围仅限于它们所定义的类。Option::$beats
是一个与Rock::$beats
不同的变量。
如果您将变量更改为protected
,那将会有效,因为类层次结构的所有成员都将共享protected
个变量(和方法)。