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