Вернуть ссылку на экземпляр объекта - PullRequest
0 голосов
/ 10 июля 2011

Я работаю над объектом 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 вместо ..

Надеюсь, кто-то знает ответ на этот вопрос

Заранее спасибо - Оле

1 Ответ

2 голосов
/ 10 июля 2011

Во-первых, перед new не нужно вводить &, так как в PHP 5 объекты по умолчанию передаются по ссылке. То, что вы делаете, правильно, но вы не можете сделать это в конструкторе, вам нужно определить метод getInstance(), который создаст ваш объект и вернет ссылку на $this->instance.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...