2017-06-09 143 views
0

我有兩個對象,像這樣的結構:OOP繼承循環

class A extends anotherClass{ 

public __construct(){ 
    parent::__construct(); 
    $this->products = new B(); 
} 

public function a(){ 
} 

} 

class B extends A{ 


public function b(){ 

} 

} 

我需要使用的方法從其他對象中的每個對象,但是這給了我疲憊的內存錯誤,除了這個事實,是一個醜陋的做法,但這就是我能想到的。 我看了看周圍的谷歌了一下,發現這樣的:

$first = class A(); 
$second = class B($first); 


class B extends A{ 
    public $firstclass; 
    public __construct($class){ 
     parent::__construct(); 
     $this->firstclass = $class; 
    } 

    public function b(){ 

    } 

} 

但是,這也並不顯得好看,但它的工作原理。

+0

爲什麼你想添加像這樣的遞歸嗎? –

+0

實際上,這不是一個'想要'的問題,而是受我對oop的一點認知的限制。如果你對如何構造這個有更好的想法,那麼它會被大大降低 –

+0

雖然我不能改變每個對象中有1個方法的事實,但我需要在另一個對象 –

回答

2

這不是一個遞歸但你最終

一個死循環,我認爲從虐待(或者 - 誤會)你的主要問題源於extends關鍵字。當你有代碼class Foo extends Bar,你應該看它作爲下列之一:

  • Foo每個實例是Bar
  • 所有Foo循規蹈矩的實例一樣的Bar
  • 情況下,一個
    特例

注意:第二個版本被認爲是更好的一個,但是 它的含義可能是複雜的新手。如果你有興趣, 它在this lecture被觸及。

在一個寫得很好的面向對象的代碼,你將不會看到任何深繼承樹(有關詳細原因,你應該read this但短版:。你應該有利於組成了繼承