0

どうしてか言ってくれない:

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

4 に答える 4

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は何にも割り当てられないためです。したがって、 に何を渡すかは問題ではありません。2回呼び出すと、changeValue常に得られます。30, 10changeValue

例:

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

引き続き出力しますa: 30 and b: 10

于 2012-04-30T22:13:29.323 に答える
4

に渡されたパラメーターchangeValue()は使用されていません。

メソッドを呼び出すたびに加算$this->a + $this->bが行われますが、渡された値を代入aまたはb追加で使用することは決してありません。

基本的に、 を呼び出すたびにchangeValue()に 10 が加算され$this->aます。

于 2012-04-30T22:15:21.203 に答える
3

私はあなたが何を期待しているのか分かりませんが、 ClassTwo->changeValue は $b パラメータを使用しないことに注意してください... (誰かがこれは答えではないと言うだろうし、そうではありませんが、問題を理解するのに十分なヒントになるはずです。)

于 2012-04-30T22:15:56.697 に答える
1
public function changeValue($b) {
    $this->b = 10;
    parent::changeValue($this->a + $this->b);
  }

$this->b != changeValue 関数の引数としての $b 多分これはあなたを混乱させました。

于 2012-04-30T22:15:42.323 に答える