2012-04-30 46 views
0

請告訴我爲什麼:PHP 5.3 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

我將不勝感激一個複雜的反應。謝謝:)

在一個側面說明:這實際上是一個考試問題,我看過了,也不太瞭解。謝謝你的回覆。

+2

這是你的家庭作業嗎?你期望輸出什麼? –

+0

我認爲你正在尋找這個http://www.php.net/manual/en/language.oop5.basic.php – ilanco

+1

也可能是您感興趣的:這個腳本會與任何輸入相同的輸出。 –

回答

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什麼時候,您在撥打changeValue兩次時都會收到30, 10

E.g. :

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

還會輸出a: 30 and b: 10

+0

@Downvoter - 有何評論? – nickb

+0

不是downvoter,但答案缺少一個細節:'$ this-> b'在代碼中永遠不會更改。 – meze

+0

@meze - 真的,很好。我提到參數列表中的'$ b'沒有被使用,因爲我不知道函數的正確邏輯是否修改'$ this-> b',所以我瞥了一眼這個事實。 – nickb

4

傳遞給changeValue()參數未使用。

中添加$this->a + $this->b每次調用該方法的結果,但你永遠不會使用無論是在分配給ab或在另外用它傳遞的值。

基本上每次調用changeValue()增加10至$this->a

+1

請解釋downvote ... – drew010

+0

我不喜歡名譽農民。 –

+0

+1,因爲這與我給出的答案相同。 –

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

$這個 - > b != $ B作爲ChangeValue函數 的說法也許這讓你感到困惑。

3

我不知道你的期望是什麼,但請注意,ClassTwo-> changeValue不使用$ b參數...(我相信有人會說這不是答案,它不是「噸,但它應該是一個足夠大的提示找出問題。)