如何将对象存储在数组中,而不是PHP中的对象引用?
我有一个循环,在其中存储一个对象,该对象已更新到数组中的下一个位置。PHP存储对对象的引用,而不是将对象存储在数组中。因此,在循环结束时,我的数组包含许多对对象最新版本的引用,所有引用都包含相同的信息。如何在循环的每次迭代中存储对象的实例如何将对象存储在数组中,而不是PHP中的对象引用?,php,arrays,oop,object,while-loop,Php,Arrays,Oop,Object,While Loop,我有一个循环,在其中存储一个对象,该对象已更新到数组中的下一个位置。PHP存储对对象的引用,而不是将对象存储在数组中。因此,在循环结束时,我的数组包含许多对对象最新版本的引用,所有引用都包含相同的信息。如何在循环的每次迭代中存储对象的实例 while( $Row = $Query->fetch_object() ) { $Company->id = $Row->id; $Company->json = json_decode($Row->json); $
while( $Row = $Query->fetch_object() ) {
$Company->id = $Row->id;
$Company->json = json_decode($Row->json);
$companies[] = $Company;
}
您可以在每次迭代中通过以下方式创建新对象:
$newObj=newcompanyclass()代码>或
$newObj=clone$Company代码>
while( $Row = $Query->fetch_object() ) {
$newCompany = clone $Company; //or new CompanyClass();
$newCompany->id = $Row->id;
$newCompany->json = json_decode($Row->json);
$companies[] = $newCompany;
}
尝试使用数组\u推送并在循环后返回它?
Clone
works。为什么会这样?我不敢相信我以前从未遇到过这个问题。当我直接将$Row从数据库存储到数组中时,它不存储对$Row的引用,而是存储对象。WTF?你指的确切问题是什么?PHP多年来都是这样工作的,关于这种行为及其原因的文章很多。如果它像你想象的那样工作,我们的记忆就会严重不足。。。我想我明白了。所以PHP识别出我的$Company
对象在任何地方都是相同的,除非我实例化了它的一个新副本,在这一点上,PHP知道它是一个不同的对象,即使变量名是相同的?这是一种令人困惑的行为,我不敢相信我以前从未遇到过这种情况。这不是一种奇怪的行为,它在OOP语言中非常常见。在PHP中,对象作为引用传递,而原语作为值传递。这非常有意义。谢谢