PHP цикл foreach странное поведение ссылок - PullRequest
0 голосов
/ 13 марта 2012

У меня странная проблема с циклом 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 Ответ

1 голос
/ 13 марта 2012

почему $ author [0] -> id ссылается на $ author-> id ??

Не (после первой итерации),

В другом месте что-то не так (возможно, в Author::__construct или Author::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

*/
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...