我正在研究一个支持多种数据库方法的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
作为参考,那么$mptt
会改为Mptt_MySQLi
..
希望有人知道答案...
提前致谢 - Ole
答案 0 :(得分:2)
首先,&
之前不需要new
,因为PHP 5中的对象默认通过引用传递。
你正在做的是正确的,但你不能在构造函数中这样做,你必须定义getInstance()
方法,它将构造你的对象并返回对$this->instance
的引用。