Допустим, у нас есть класс User. В нем заданы public свойства и метод showInfo, выводящий информацию о пользователе.
class User{ public $id; public $name; public $email; function showInfo(){ echo $this->name.' : '.$this->email; } }
- Работать с этим классом можно так:
$obj = $stmt->fetchALL(PDO::FETCH_CLASS, 'User'); foreach($obj as $user) $user->showInfo();
Здесь мы использовали fetchALL. В отличие от простого fetch, он вытаскивает сразу все записи. В скобках указываем константу FETCH_CLASS и имя класса. Далее в конструкции foreach используем $name, который становится экземпляром класса User, заполняются все соответствующие свойства. И в конце вызываем метод showInfo. Недостаток такого метода, что каждый раз в конструкции foreach создается новый объект, при каждой итерации.
- Чтобы этого избежать, можно использовать метод fetchObject. Он работает только с одной записью, и возвращает один объект, экземпляр указанного класса:
$users = $stmt->fetchObject('User');
Т.е. здесь сразу создается объект, экземпляр класса User.
- В предыдущих двух примерах объект создавался ‘на лету’, его не существовало ранее. А что если объект уже существует? Тогда используем метод setFetchMode:
$user = new User(); //создали объект $stmt = $dbh->query($sql); $stmt->setFetchMode(PDO::FETCH_INTO, $user);
Здесь используем константу FETCH_INTO.