2011-12-18 1 views
1

は簡単な例です:

class Class_A { 
    protected $_property; 

    public function method() 
    { 
     Class_B::method($this); 
    } 

    public function getProperty() 
    { 
     return $this->_property; 
    } 
} 

class Class_B { 
    public static function method(Class_A $classA) 
    { 
     $classA->getProperty(); 
    } 
} 

$classA = new ClassA(); 
$classA->method(); 

は、別のクラスのメソッドにパラメータとして$にこのに合格することが今まで大丈夫ですか?それとも、常にがタイトなカップリングになるのでしょうか?静的メソッド呼び出しの代わりにファクトリパターンを使用して、別の同様の例を提示することもできます。

答えて

1

それはClass_AClass_Bの正確な動作に依存するが、一般的には、おそらく、そのためClass_Aと型ヒントによって実装されるインタフェースを定義する方が良いだろう。 Class_B(たとえばgetProperty())が必要とするClass_Aのメソッドが、あなたのインターフェイスに表示されます。その後、Class_Aを別のクラスに切り替えたい場合は、同じインターフェイスを実装するだけです。

+0

ありがとうございました。今私はそれを密接に結合させる正確な振る舞いを考えようとしています – Dan

+0

[この質問を見る](http://stackoverflow.com/questions/2832017/what-is-the-difference-between-loose-coupling-より詳細な情報については、オブジェクト・オリエンタル・オブ・オブ・オブ・オブ・オブ・オブ・オブ・オブ・オブ・オーリエン)。つまり、あなたの例では 'Class_B'は' Class_A'に依存していますが、インターフェースを使うとその依存関係は削除されます。あなたは、そのインタフェースを実装したモックオブジェクトを使って、 'Class_B'を独立にテストすることができました。 – cmbuckley

0

はまたしても、それは問題のクラスの動作に依存するだけでなく、あなたがClass_AClass_CClass_Bを伸ばすことを検討することをお勧めしますClass_Bの静的メソッドを使用し例えば別のClass_Cがあった場合。詳細は、object inheritance pageにあります。

関連する問題