Я рефакторинг частей моего приложения и заменяю некоторые fetch(PDO::FETCH_ASSOC)
выделенным классам с помощью fetchObject()
.Доступ к соединению PDO в fetchObject() - экземпляр
Есть ли способ получить доступ к экземпляру pdo внутри сгенерированного класса? См. Этот пример:
class User
{
private $id;
private $username;
private $firstname;
private $lastname;
public function setFirstname($newValue)
{
if (empty($newValue) || !is_string($newValue)) throw new Exception('Wrong');
$this->firstname = $newValue;
}
public function save()
{
// IMPORTANT PART:
// I don't want to use the global object container here
$dbh = Application::getInstance()->getPDO();
$sth = $dbh->prepare('UPDATE main_user SET firstname = :firstname WHERE id = :id');
$sth->execute([
'id' => $this->id,
'firstname' => $this->firstname,
]);
}
}
$dbh = $application->getPDO();
$sth = $dbh->prepare('SELECT * FROM main_user WHERE id = ?');
$sth->execute([ 10 ]);
$user = $sth->fetchObject('User');
$user->setFirstname('Test');
$user->save();
Части моего приложения используют несколько баз данных и, следовательно, несколько объектов pdo. Чтобы получить повторно используемый код, я бы хотел, конечно, не использовать мой глобальный контейнерный класс - и global
.
Сделайте член класса (например, 'User :: $ conn') и передайте свое PDO-соединение в качестве параметра в конструкторе, чтобы установить его? – CD001