J'utilise l'extension mysqli et lier le résultat à un objet:déclaration mysqli: fetch() un tableau de résultats
class Item {
public $id, $name;
}
$Item = new Item;
$stmt->bind_result($Item->id, $Item->name);
Chaque appel à $stmt->fetch()
écrasera les propriétés $ qui sont devenus des références article. Si je clone simplement l'objet - ces références restent et les deux instances changent simultanément:
object(Item)#1 (2) {
["id"]=>
&int(1)
["name"]=>
&string(4) "name"
}
Il devrait y avoir un moyen de déréférencer les clone
donc fait vraiment une copie, pas un ensemble de données référencées. Existe-t-il un moyen simple et flexible de récupérer toutes les données afin qu'elles soient stockées sous la forme d'un tableau d'objets? Le principal problème est de savoir comment supprimer les références: &string
.
La seule solution que je vois est d'instancier un autre objet et copier manuellement toutes les propriétés:
$Item2 = new Item;
foreach ($Item as $prop => $val)
$Item2->$prop = $val;
mais cela semble être un surpuissant: il copiera toutes les propriétés (y compris certaines supplémentaires qui ne sont pas en fait référencé) ce qui n'est pas nécessaire, et d'ailleurs - est une pénalité à la performance.
Actially, j'ai écrit une classe qui lie les champs de résultat à un objet automagiquement. La seule chose qui lui manque est une option pour stocker les lignes, pas seulement itérer et oublier. – kolypto