PHP 5.3 OOP需要回答

时间:2012-04-30 22:07:20

标签: 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;
        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: 30b: 10

我希望得到精心回应。谢谢:))

旁注:这实际上是我查看的一个考试题目,并不太明白。感谢您的回复。

4 个答案:

答案 0 :(得分:4)

我不知道如何总结这个执行,除了“它正在执行你写的逻辑”。

我已在每次调用中添加评论以显示中间步骤:

$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的内容并不重要,当您拨打30, 10两次时,您将始终获得changeValue

E.g。 :

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

仍会输出a: 30 and b: 10

答案 1 :(得分:4)

传递给changeValue()的参数未使用。

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

基本上每次拨打changeValue()都会向$this->a添加10。

答案 2 :(得分:3)

我不知道你的期望,但请注意ClassTwo-> changeValue不使用$ b参数...(我相信有人会说这不是答案,而且它不是但是,它应该是一个足够大的暗示来解决问题。)

答案 3 :(得分:1)

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

$ this-> b != $ b作为changeValue函数的参数 也许这让你很困惑。