2011-09-25 14 views
1

親オブジェクトに属するオブジェクト間でメソッドを共有しようとしています。子オブジェクト間のメソッドの共有

私は主なオブジェクトを持っています。これには、さまざまなタスクを処理する子オブジェクトがあります。これらは、メインのオブジェクトのコンストラクタを使用して作成されます。ここでは

class engine { 

    public function __construct() { 

    $this->db = new db(); 
    $this->url = new url(); 
    $this->template = new template(); 

    } 

} 

は、私は私のメインのオブジェクトを使用する方法の例です:

子オブジェクトは、例えばどのように(他の子供たちのメソッドにアクセスすることができる方法
$engine = new engine(); 

$engine->db->connect(); 
$engine->url->parse(); 
$engine->template->render(); 

template->render()url->parse()と電話できますか?

+3

からUrl::parse();のようにそれを呼び出します。明らかに何かをレンダリングすることであるテンプレートオブジェクトは、url-> parseを呼び出さなければならないのでしょうか?あなたがそれについての説明があるなら、あなたの質問への答えは、[Dependency Injection](http://stackoverflow.com/questions/6094744/dependecy-hell-how-does-one-pass-dependencies-to-deeply-ネストされたオブジェクト/ 6095002#6095002)。 – Gordon

+0

それは私が与えた悪い例でした。私の設計では、レンダリングされたテンプレートの選択は、要求されたURLに時々依存します(テンプレート定義内で何かを再作成するのではなく、URLオブジェクトを解析したいと思います)。 Dependency Injectionは私が探していたものなので、ありがとう。 –

+1

また、[SOLID](https://secure.wikimedia.org/wikipedia/en/wiki/Solid_%28object-oriented_design%29)と[GRASP](https://secure.wikimedia.org/)に興味があります。 Wikipedia/en/wiki/GRASP_%28object-oriented_design%29)と[Demeterの法則](https://secure.wikimedia.org/wikipedia/en/wiki/Law_of_Demeter)と[The Clean Code Talks](http: //www.youtube.com/results?search_query=The+Clean+Code+Talks&aq=f) – Gordon

答えて

0

あなたはクラスの静的プロパティを設定し、staticalyそれを呼び出すことができます。

static public function parse() { 
    <some code> 
} 

とあなたのデザインが壊れている$template->render();

+0

OPは、クラスベースのプログラミングではなく、タイトなカップリングによってアプリケーションの保守性を阻止する方法についての質問です://kore-nordmann.de/blog/0103_static_considered_harmful.html – Gordon

+0

あなたが認識しなかった場合、問題は「子オブジェクトが他の子供のメソッドにどのようにアクセスできるか」でした。だから、これは彼らができる方法です。 –

+0

ええ、可能な限り最適な方法で。このようにすれば、オブジェクトを完全に捨てて手続き型プログラミングを使うこともできます。 – Gordon

関連する問題