代替

2011-01-19 16 views
1
私はクラスの周り私の頭を取得して実際の問題を抱えている、と誰かが私に答えることができる期待しています(非常に基本的な!)質問

代替

を私はセットアップのmysqlに私を許可するMySQLのクラスを持っている

クエリを実行し、関連する他のmysql関数を実行します。

親\子構造を持つデータベース設定があり、親\子構造を反映する一連のネストされたリストを出力する再帰関数(my createNode関数)があります。

createNode関数は、データベースから必要なデータを照会するために、すべての再帰でmysqlクラスをインスタンス化します。

理想的には、このcreateNode関数をクラスに追加したいと思いますが、あるクラスを別のクラスにインスタンス化することは悪い習慣であると私は理解しています。

この問題を回避するためにクラスを構造化するにはどうすればよいですか?

ありがとうございます!

+1

いいえ、**別のクラス内でクラスをインスタンス化することは悪いことではありません(ファクトリパターンを参考にしてください)。しかし、その特定のケースでは、MySQLクラスをNodeCreatorクラスのコンストラクタに渡すことができます。 – netcoder

答えて

3
class Noder { 
    private $_conn; 
    public function __construct($mysql_connection) 
    { 
    $this->_conn = $mysql_connection; 
    } 
    public function createNode() 
    { 
    // whatever you do 
    } 
} 
$mysql = new Mysql(); 
$noder = new Noder($mysql); 
+0

+1上記の私のコメントで正確に何を言っていたのですか? :)また、 'Mysql'型へのヒントをタイプすることもできます。 – netcoder

+0

超高速応答のためにscragzとnetcoderの両方に感謝します。あなたの説明のネットコーダーと同様、コード例も素晴らしいです。これは私には分かりやすいです:-)私は今試してみます。 – discojoe