2011-07-10 10 views
0

私はいくつかのデータベースメソッドをサポートするMPTTオブジェクトを作成しています。最初はMySQLとMySQLiです。今、私はこのオブジェクトインスタンスの参照を返します。

MPTTのようにそれを作成しました - 正しいサブオブジェクト

class Mptt { 
/** 
* Array of available driver types 
* @var array 
*/ 
private $availableDrivers = array('mysqli','mysql'); 

/** 
* Holding an instance of the mptt object corresponding to the selected driver 
* @var object 
*/ 
public $instance; 

public function __construct($driver = 'mysqli', $autoConnect = false, $info = array()) { 
    if (in_array($driver, $this->availableDrivers)) { 
     switch ($driver) { 
      case 'mysqli': 
       $this->instance =& new Mptt_MySQLi(); 
       break; 

      case 'mysql': 
       $this->instance =& new Mptt_MySQL(); 
       break; 
     } 

     return $this->instance; 
    } 
} 
} 

をロードする主な目的は、今、私はこの作業を得ることに成功してきた唯一の方法のような何かを行うことです

各ドライバのパブリック変数を追加し、この

$mptt = new Mptt('mysqli');
$mptt->mysqli->addBranch(.....);

のようにそれを行います10

しかし、私はmysqli-> partが..だから私はうまくいけば、誰かがこの答えを知っている

..私は多分refferenceとして$this->instanceを渡そうとしましたならば、$mpttではなくMptt_MySQLiにrefferだろうと思ったこと...

たくありません事前 で

おかげ - オレPHP 5のオブジェクトのように

+0

これをチェックしてください:http://components.symfony-project.org/dependency-injection/ – Mchl

答えて

2

まず、new&の必要はありませんが、デフォルトで参照によって渡されます。 正しいことはしていますが、コンストラクタでこれを行うことはできません。getInstance()メソッドを定義する必要があります。このメソッドはオブジェクトを作成し、$this->instanceへの参照を返します。

+1

また、私はここではドライバーのより伝統的な解釈を使用するかもしれないと思います。 "ドライバ"インスタンスを保護し、 'Mptt'クラスを通してのみ動作させます。この方法で、 'Mptt'が使用可能なすべてのドライバに一貫したインタフェースを提供するため、どのドライバを使用しているかを知る必要はありません。 – prodigitalson

+0

あなたはこれについてあなたが何を意味しているか完全に理解していますか? –

+0

LOLこれは遅かった..私は尋ねてきたことを忘れていました。そして、ええ。答えとしてこれを受け入れました。 –

関連する問題