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;
しかし、これはやり過ぎのようです: すべてのプロパティ (実際には参照されなかったいくつかの余分なプロパティを含む) がコピーされますが、これは必要ではありません。