PHP5.3OOP需要答案

PHP5.3OOP需要答案,php,oop,Php,Oop,请告诉我原因: class ClassOne { protected $a = 10; public function changeValue($b) { $this->a = $b; } } class ClassTwo extends ClassOne { protected $b = 10; public function changeValue($b) { $this->b = 10;

请告诉我原因:

class ClassOne {
    protected $a = 10;

    public function changeValue($b) {
        $this->a = $b;
    }
}

class ClassTwo extends ClassOne {
    protected $b = 10;

    public function changeValue($b) {
        $this->b = 10;
        parent::changeValue($this->a + $this->b);
    }

    public function displayValues() {
        print "a: {$this->a}, b: {$this->b}\n";
    }
}

$obj = new ClassTwo();

$obj->changeValue(20);
$obj->changeValue(10);    
$obj->displayValues();
打印
a:30
b:10

我希望得到详细的答复。谢谢:)


顺便说一句:这实际上是一道我看过的试题,我不太明白。感谢您的回复。

除了“它按照您所写的逻辑执行”之外,我不知道如何总结此执行

我为每个调用添加了注释,以显示中间步骤:

$obj = new ClassTwo(); // a = 10, b = 10

$obj->changeValue(20); // Sets b = 10, a = 20 (a = 10 + 10 = 20)
$obj->changeValue(10); // Sets b = 10, a = 30 (a = 20 + 10 = 30)
                                                   ^
                                                   Previous value of a
$obj->displayValues();
您可能对此感到困惑:

public function changeValue($b) {
    $this->b = 10;
    parent::changeValue($this->a + $this->b);
}
因为
$b
从未分配给任何对象。因此,无论您将什么传递给
changeValue
,当您调用
changeValue
两次时,您总是会得到
30、10

例如:

$obj->changeValue(0); 
$obj->changeValue(0);

仍将输出
a:30和b:10
传递给
changeValue()
的参数未使用

对方法的每次调用都会导致添加
$this->a+$this->b
,但您永远不会在分配给
a
b
或在添加时使用传入的值

基本上,每次调用
changeValue()
都会给
$this->a
增加10

public function changeValue($b) {
    $this->b = 10;
    parent::changeValue($this->a + $this->b);
  }
$this->b=$b作为changeValue函数的参数
也许这让您感到困惑。

我不知道您期望的是什么,但请注意Class2->changeValue没有使用$b参数。。。(我肯定有人会说这不是答案,也不是,但这应该是一个足够大的提示来解决问题。)

这是你的家庭作业吗?你对输出的期望是什么?我想你正在寻找一个对你来说可能也很有趣的东西:这个脚本对任何输入都有相同的输出。我不喜欢声誉农民。是用户在愚蠢的问题上尝试他们的“声誉”。@OZ那么你喜欢罗宾汉吗?你四处评估简单的“愚蠢”问题的答案,如果用户名声太大,你会投票否决完美的答案?@user12345613,不,我没有那么讨厌。没有愚蠢的问题,只有愚蠢的评论。(我真的不相信这一点,但最初的问题并不愚蠢,可能只是基于一个错误的前提。)不是downvoter,但答案缺少一个细节:
$this->b
在代码中从未更改。@meze-正确,很好。我通过提到参数列表中的
$b
是未使用的来略过这一事实,因为我不知道函数的正确逻辑是否是修改
$this->b
@nickb。我已经接受了您的答案,因为您为格式化它所做的努力并做出了明确的解释。谢谢你的帮助!