返回对象实例的引用

时间:2011-07-10 14:52:17

标签: php object instance mptt

我正在研究一个支持多种数据库方法的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

1 个答案:

答案 0 :(得分:2)

首先,&之前不需要new,因为PHP 5中的对象默认通过引用传递。 你正在做的是正确的,但你不能在构造函数中这样做,你必须定义getInstance()方法,它将构造你的对象并返回对$this->instance的引用。