Utilizzo in una classe
Le query possono essere recuperate in oggetti basati su classi personalizzate. Ad esempio, se abbiamo una classe chiamata ExampleClass, la seguente query restituirà oggetti di tipo ExampleClass.
$result = $connection->query("SELECT id, title FROM {example_table}", [], [
'fetch' => 'ExampleClass',
]);
Se la classe ha un metodo __construct(), gli oggetti verranno creati, le proprietà verranno aggiunte all’oggetto e poi verrà invocato il metodo __construct(). Ad esempio, se hai la seguente classe e query:
class ExampleClass {
function __construct() {
// Fare qualcosa
}
}
$result = $connection->query("SELECT id, title FROM {example_table}", [], [
'fetch' => 'ExampleClass',
]);
L’oggetto verrà creato, le proprietà id e title saranno aggiunte all’oggetto e poi verrà eseguito __construct(). L’ordine di questi eventi è legato a un bug in PHP per le versioni inferiori alla 5.2.
Se nella classe esiste un metodo __construct() che deve essere eseguito prima dell’aggiunta delle proprietà all’oggetto, il seguente esempio mostra come fare:
$result = $connection->query("SELECT id, title FROM {example_table}");
foreach ($result->fetchAll(PDO::FETCH_CLASS | PDO::FETCH_PROPS_LATE, 'ExampleClass') as $record) {
// Fare qualcosa
}
Gli argomenti passati a fetchAll possono essere usati nello stesso modo. PDO::FETCH_CLASS indica a fetchAll di prendere il set di risultati restituito e aggiungere i valori come proprietà a un oggetto di tipo ExampleClass (secondo argomento). PDO::FETCH_PROPS_LATE indica a fetchAll di aggiungere il set di risultati come proprietà dell’oggetto dopo l’esecuzione di __construct().