Quando objetos são buscados através de PDO::FETCH_CLASS, as propriedades
do objeto são atribuídas primeiro, e depois o construtor da classe é
invocado. Entretanto, quando PDO::FETCH_PROPS_LATE também for informada,
esta ordem é revertida, isto, é, primeiro o construtor é chamado, e
depois as propriedades são atribuídas.
<?php
class Person
{
private $name;
public function __construct()
{
$this->tell();
}
public function tell()
{
if (isset($this->name)) {
echo "Eu sou {$this->name}.\n";
} else {
echo "Eu não tenho um nome ainda.\n";
}
}
}
$sth = $dbh->query("SELECT * FROM people");
$sth->setFetchMode(PDO::FETCH_CLASS, 'Person');
$person = $sth->fetch();
$person->tell();
$sth->setFetchMode(PDO::FETCH_CLASS|PDO::FETCH_PROPS_LATE, 'Person');
$person = $sth->fetch();
$person->tell();
?>
O exemplo acima produzirá
algo semelhante a:
Eu sou Alice.
Eu sou Alice.
Eu não tenho um nome ainda.
Eu sou Bob.