2011-07-10 93 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(.....);

,但我不希望mysqli-> part ..所以我想如果我也許試圖將$this->instance通過作爲REFFERENCE然後$mptt將reffer到Mptt_MySQLi代替..

希望有人知道一個答案..

預先感謝 - 奧萊

+0

看看這個:http://components.symfony-project.org/dependency-injection/ – Mchl

回答

2

首先,new前不需&,如PHP 5的對象由默認引用傳遞。 你在做什麼是正確的,但你不能在構造函數中做到這一點,你必須定義getInstance()方法,它將構造你的對象並返回引用到$this->instance

+1

此外,我想我可能會在這裏使用更傳統的驅動程序的解釋。使「驅動程序」實例受保護,只能通過「Mptt」類工作。這樣,您永遠不需要知道您正在使用的驅動程序,因爲「Mptt」將爲其所有可用的驅動程序提供單個一致的接口。 – prodigitalson

+0

不知道我完全明白你的意思嗎? –

+0

洛爾這是遲到..忘了我已經問過,現在登錄,是的..接受這個答案:)遲到比從來沒有更好我猜 –

相關問題