Передача объекта $ db другим классам, чтобы они могли получить доступ к базе данных

У меня есть класс базы данных PHP, который подключается к MySQL и объединяет весь код PDO, и я использую его для запроса В основном в контроллере страницы я создаю новый объект:

$db = new Database($dbConfig);

Затем я могу получить данные из базы данных, например, используя подготовленный запрос:

$params = array('username' => $username);
$result = $db->preparedSelect('select password, salt from users where username = :username', $params);

Который копирует результаты оператора PDO в новый ассоциативный массив и возвращает только базу данных результаты возвращаются на вызывающую страницу. Я просматриваю их с помощью простого цикла foreach, например:

foreach ($result as $key => $val)
{
   $password = $val['password'];
   $salt = $val['salt'];
}

Хорошо, допустим, я хочу, чтобы другой класс использовал мой объект $ db, чтобы он мог получить доступ к базе данных в некоторых методах. На данный момент другой класс выглядит так:

class General
{
    // Database object
    private $db;

    public function __construct($db)
    {
        $this->db = $db;
    }
}

Это работает хорошо, но мне просто интересно, должен ли конструктор выглядеть так:

public function __construct(&$db)
{
    $this->db = $db;
}

Это должно означать, что я передаю его по ссылке, а не копирую объект в другой класс. Мне не нужна копия объекта $ db внутри класса, я хочу, чтобы он использовал существующий объект базы данных, чтобы у меня не было нескольких его копий, плавающих по всей памяти.

Есть ли разница в PHP5 между передачей его как $ db или & $ db? После некоторого чтения PHP5 по умолчанию передает объекты по ссылке, и другие люди говорят, что теперь он делает это способом Java, а некоторые говорят, что использование & делает жесткую ссылку, какой бы она ни была. Я запутался. Какой' как лучший способ сделать это?

Большое спасибо!

5
задан hakre 30 August 2012 в 07:49
поделиться