2012-03-13 7 views
0

私はforeachループと参照に奇妙な問題があります。 はここに私のコードです:私たちはそれらのオブジェクトの両方がデータベースに作成されていることを前提とした場合のでPHP 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ループで参照を使用しないので、どこから来たのかわかりません!

どのようなご提案も歓迎いたします。 ありがとう

+0

あなたは出力を1-1、2-1ではありませんか?それが出力するものと同じように見えます。ただ確認したかったですか? –

+0

$ authors配列を作成するときにidを保存しないので、0,1、...に設定されます。したがって、$ authors [0]は最初の繰り返しで$ authorと同じになります。 –

+0

@Ben出力は間違いありません1-1 2-2。 – renard

答えて

1

なぜ$ authors [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 

*/ 
+0

実際に、データを作成または取得するためにクエリを実行するORMレイヤがあります。次に、id属性などのシャドウデータが与えられたPHPオブジェクトモデルを取得しました。 – renard