Я использую расширение mysqli и привязываю результат к объекту:
class Item {
public $id, $name;
}
$Item = new Item;
$stmt->bind_result($Item->id, $Item->name);
Каждый вызов $stmt->fetch()
перезапишет свойства $ Item, которые стали ссылками.Если я просто клонирую объект - эти ссылки остаются, и оба экземпляра изменяются одновременно:
object(Item)#1 (2) {
["id"]=>
&int(1)
["name"]=>
&string(4) "name"
}
Так что должен быть способ разыменовать их, чтобы clone
действительно делал копию, а не набор ссылочных данных.Существует ли простой, гибкий способ извлечения всех данных, чтобы они сохранялись в виде массива объектов?Основная проблема заключается в том, как удалить ссылки: &string
.
Единственное решение, которое я вижу, - создать экземпляр другого объекта и вручную скопировать все свойства:
$Item2 = new Item;
foreach ($Item as $prop => $val)
$Item2->$prop = $val;
, но, похоже, этобыть излишним: он скопирует все свойства (включая некоторые дополнительные, на которые фактически не ссылались), что не является необходимым, и, более того, - штраф за производительность.