PHP foreach循环奇数引用行为

时间:2012-03-13 18:54:14

标签: php reference foreach

我对foreach循环和引用有一个奇怪的问题。 这是我的代码:

  $authors = array(                                                                                                                                                            
       new Author(array('first_name'=>'Name 1','last_name'=>'last name 1')),                                                                                                         
       new Author(array('first_name'=>'name 1','last_name'=>'last name 2')),                                                                                                   
  );                                                                                                                                                                           

  foreach($authors as $key => $author){                                                                                                                                                
    $authors[$key] = Author::manager()->getOrCreate($author);                                                                                                                       
    print $author->id."-".$authors[0]->id."<br>";                                                                                                                                                                                                                                                               
  }                   

因此,如果我们假设这两个对象都是在数据库中创建的,那么显示的输出是:

1-1
2-2

你猜我的问题是:为什么$authors[0]->id指的是$author->id? 我想这是引用的问题,但由于我不在foreach循环中使用引用,我不知道它来自哪里!

欢迎任何建议。 感谢

1 个答案:

答案 0 :(得分:1)

  

为什么$ authors [0] - &gt; id引用$ author-&gt; id ??

它不(在第一次迭代后)。

其他地方出现了问题(可能在Author::__constructAuthor::manager):

class Author
{
    public $id;

    function __construct($params)
    {
        $this->id = substr($params['last_name'], -1);
    }
}


$authors = array(                                                                                                                                                            
    new Author(array('first_name'=>'Name 1','last_name'=>'last name 1')),                                                                                                         
    new Author(array('first_name'=>'name 1','last_name'=>'last name 2')),                                                                                                   
);                                                                                                                                                                           

foreach($authors as $key => $author){                                                                                                                                                                                                                                                                      
    print $author->id."-".$authors[0]->id."<br>";                                                                                                                                                                                                                                                               
}

/* 
output:

1-1
2-1

*/