如何在数组中存储Object,而不是在PHP中引用Object?

时间:2015-11-04 21:51:55

标签: php arrays oop object while-loop

我有一个循环,我将一个已更新的对象存储到数组中的下一个位置。 PHP存储对象的引用,而不是将对象存储在数组中。因此,在我的循环结束时,我的数组包含许多对该对象的最新版本的引用,这些引用都包含相同的信息。如何在循环的每次迭代中存储对象的实例?

while( $Row = $Query->fetch_object() ) {
  $Company->id = $Row->id;
  $Company->json = json_decode($Row->json);
  $companies[] = $Company;
}

1 个答案:

答案 0 :(得分:2)

您可以通过以下任一方法在每次迭代中创建一个新对象:

  1. 实例化新对象$newObj = new CompanyClass();
  2. 克隆旧对象$newObj = clone $Company;
  3. 请记住,PHP执行所有对象属性的浅表副本。任何引用其他变量的属性都将保留引用。

    while( $Row = $Query->fetch_object() ) {
      $newCompany = clone $Company; //or new CompanyClass();
      $newCompany->id = $Row->id;
      $newCompany->json = json_decode($Row->json);
      $companies[] = $newCompany;
    }