pdo классы

Работа с классами

Допустим, у нас есть класс 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.




Добавить комментарий

Ваш e-mail не будет опубликован.