У меня есть класс базы данных 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, а некоторые говорят, что использование & делает жесткую ссылку, какой бы она ни была. Я не совсем понимаю. Какой лучший способ сделать это?
Большое спасибо!