2017-06-09 22 views
0

私はこのような構造を持つ2つのオブジェクトがあります。OOPの継承ループ

class A extends anotherClass{ 

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

public function a(){ 
} 

} 

class B extends A{ 


public function b(){ 

} 

} 
私は他のオブジェクトの各オブジェクトからメソッドを使用する必要があるが、これは事実のほかに、私の疲れメモリエラーを与える

それをするのは醜い方法ですが、それは私が思いつくことができるすべてです。 私はGoogleの周りのビットを見て、このような何か見つけた:

$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

実際には、それは「欲しい」問題ではなく、私の小さな知識によって制限されています。もしあなたがこれをどのように構造化するかについてのよりよい考えがあれば、それは非常に評価されるでしょう –

+0

私は各オブジェクトに1つのメソッドがあるという事実を変更することはできませんが、他のオブジェクトではこれが必要です –

答えて

2

それは再帰ではありませんが、あなたは

で終わる無限ループは、私はあなたの主な問題は、虐待(または多分 - 誤解)に由来だと思うextendsキーワードの。あなたは、コードclass Foo extends Barを持っている場合は、次のいずれかのようにそれを読んでください:

  • Fooのすべてのインスタンスは、FooのすべてのインスタンスがBar
  • インスタンスのように振る舞うBar
  • 特殊なケースであります

注: 2番目のバージョンはより良いと考えられます。しかし その意味は初心者にとってはおそらく複雑です。興味があれば this lectureに触れています。よく書かれたオブジェクト指向のコードで

あなたはread thisべき、詳細な理由のために任意の深い継承ツリーを(見ていないだろうが、短いバージョン:。。あなたが相続上で構図を優先すべきである