2014-09-27 20 views
0

我正在學習OO PHP,並且正在嘗試在子類中使用parent ::方法。我注意到我不得不使用「額外」返回爲父方法的輸出顯示。 有人可以解釋我爲什麼這是?爲什麼在調用父項時使用返回

請理解我正在使用一本書,這個例子似乎有點多餘。請隨身攜帶,因爲下面的代碼是新手...

這是我使用的代碼,並且在代碼中我發表了評論。

class ShopProduct { 

    public $productnumber; 

    public function __construct($productnumber) { 
     $this->productnumber = $productnumber; 
    } 
    public function getSummary(){ 
     return $this->productnumber; 
    } 
} 

class BookProduct extends ShopProduct { 

    public function __construct($productnumber) { 
     parent::__construct($productnumber); 
    } 
    public function getSummary() { 
     return parent::getSummary(); // if i dont use return it doesnt work? why is that? 
     // parent::getSummary(); is not enough it seems. 
    } 
} 

$product = new BookProduct(11111); 
echo $product->getSummary(); 
?> 
+1

好吧,如果你不這樣做與價值的東西,父類的方法返回,你能指望什麼?返回不會將任何內容打印到輸出緩衝區。所以你在擴展類中調用函數,但是,擴展類對該函數沒有任何作用。因爲你的子函數的返回優先於父函數。 – Ohgodwhy 2014-09-27 19:15:18

+0

'getSummary()'應該返回一個值,在這種情況下它只返回'parent :: getSummary()'的值。你當然可以重寫孩子的'getSummary()'。 – 2014-09-27 19:16:11

+0

我的代碼的最後一行使用方法和Echo的。爲此我期待着這個價值。在父類方法中,返回值,所以我期待它在child方法中繼承「return」--behaviour,因爲我從孩子調用父方法。如果有人可以用更多的詞彙來解釋這將是最有幫助的。 – rinserepeat 2014-09-27 19:18:20

回答

1
public function getSummary() { 
    return parent::getSummary(); // if i dont use return it doesnt work? why is that? 
    // parent::getSummary(); is not enough it seems. 
} 

與任何其它的函數或方法調用替換parent::getSummary()

public function getSummary() { 
    foo(); 
} 

你當然不會指望getSummary在這種情況下返回任何東西,對不對?僅僅因爲你調用的方法是parent::...不會改變任何有關此行爲的內容。它不會自動的return,因爲你可能需要做這樣的事情:

public function getSummary() { 
    $summary = parent::getSummary(); 
    return "Book: $summary"; 
} 

順便說一句,如果你的方法做的唯一事情就是調用它的父母,你可以離開了整個方法。換句話說,這樣的:

class BookProduct extends ShopProduct { 

    public function __construct($productnumber) { 
     parent::__construct($productnumber); 
    } 
    public function getSummary() { 
     return parent::getSummary(); 
    } 
} 

是完全一樣的:

class BookProduct extends ShopProduct { } 
+0

Thanks Deceze,我正在使用一本書,我認爲他們試圖通過所有的概念。這可能是我的例子似乎有點多餘的原因。我的問題是關注「爲什麼」我應該使用「返回」兩次。至少這就是我的大腦告訴我的。我作爲(新手)期望父方法使用的「返回」被子方法繼承。我似乎誤解了這一點,但我試圖理解這是爲什麼。 (我在最後一行使用了一個回聲,這樣我確實希望輸出一些東西嗎?) – rinserepeat 2014-09-27 19:31:48

+0

好吧,我想我明白你在說什麼,這要歸功於第二個例子!我想也許OO的魔法帶來的比我想象的要多。我感謝你的時間和解釋! – rinserepeat 2014-09-27 19:38:57

相關問題