У меня есть класс с именем Admin
, и он имеет те же поля, что и поля в моей таблице admins
в базе данных: id
, email
, pwhash
, pwnonce
, name
, permissions
.
Мой класс выглядит так (упрощенно):
class Admin {
var $id, $email, $pwhash, $pwnonce, $name, $permissions;
function auth() {
// checks the session and attempts to authenticate the user
}
function login($email,$pw) {
// authenticate the user and start a session for them.
}
}
Проблема в том, что я хочу использовать PDO для извлечения объекта с использованием текущего класса и присвоения его текущему объекту.
Раньше я выбирал ассоциативный массив и присваивал все переменные по одной, но теперь, поскольку я изменяю свою систему на использование PDO, я хочу, чтобы он возвращал экземпляр Admin
класс, который я назначаю текущему.
Например, в методе auth()
должно быть что-то вроде этого:
function auth() {
if (!isset($_SESSION['id'])) return false;
$id = $_SESSION['id'];
// create PDO connection and assign to $dbh
$sth = $dbh->prepare('SELECT * FROM admins WHERE id = ?');
$sth->execute(array($id));
$sth->setFetchMode(PDO::FETCH_CLASS,get_class($this));
$obj = $sth->fetch();
if (!is_object($obj)) return false;
$this = $obj; // I know this won't work, but anyway...
}
Итак, я попробовал это, и, как я и подозревал, это не позволит мне присвоить значение $this
. Однако я все еще хочу использовать функциональность сопоставления объектов PDO, так как я могу назначить объект, возвращенный из PDO, экземпляру, в котором я нахожусь?