2013-11-25 235 views
0

改變對象的屬性,我得到這個while循環進入我listByEvent功能我的照片類中找回我的分貝照片:While循環在PHP

while ($fetch_query = mysql_fetch_assoc($get_foto)) { 

     $this -> idFoto = $fetch_query['idFoto']; 
     $this -> arquivo = $fetch_query['arquivo']; 
     $this -> legenda = $fetch_query['legenda']; 
     $this -> idEvento = $fetch_query['idEvento']; 
     $this -> curtidas = $fetch_query['curtidas']; 
     $this -> naocurtidas = $fetch_query['naocurtidas']; 
     $fotos[] = $this; 

    } 
      return $fotos; 

然後在我看來(show.php),我稱之爲方法是這樣的:

   $foto = new foto(); 
       $foto -> idEvento = $key -> idEvento; 
       $fotos = $foto -> listByEvent(); 
       foreach ($fotos as $fotokey) { 
            //here i proper format the layout 
            } 

但是,while循環無法覆蓋$這個屬性,它總是檢索相同的照片。如果我改變fc來調用一個新的obj,像這樣:

  while ($fetch_query = mysql_fetch_assoc($get_foto)) { 

     $jack = new foto(); 
     $jack -> idFoto = $fetch_query['idFoto']; 
     $jack -> arquivo = $fetch_query['arquivo']; 
     $jack -> legenda = $fetch_query['legenda']; 
     $jack -> idEvento = $fetch_query['idEvento']; 
     $jack -> curtidas = $fetch_query['curtidas']; 
     $jack -> naocurtidas = $fetch_query['naocurtidas']; 
     $fotos[] = $jack; 

    } 
      return $fotos; 

比它的作品。任何人都可以解釋爲什麼我無法在while循環中重寫此方法?謝謝你的時間

回答

1

當你分配類對象,你不做一個副本,你只是分配一個對象的引用。所以在你的第一個循環中,所有的數組元素指向同一個$this對象,每次你通過循環修改它。您需要使用new來創建新對象,以便數組元素不同。

+0

謝謝。你的意思是說,在$ fotos [] = $ this中,每一個鍵都會改變每次這個改變並獲得所有相同的值? – sagits

+0

是的,它們都獲得相同的值,因爲在特定的方法調用中只有一個'$ this'對象。 – Barmar

0

指針是僅在一個類,結構,或聯合類型的非靜態構件函數訪問的指針。它指向調用成員函數的對象。 靜態成員函數沒有這個指針。因此這個指針返回相同的值。

所以你需要創建一個新的對象來保存這些值。這就是爲什麼它在第二個循環中工作。

+0

它不是一個靜態函數,它在obj上被調用,就像obj - > ListByid()。如果它是一個靜態函數,它就不會從第一個循環中返回任何東西(我將得到一個無法在靜態函數方法錯誤上調用obj屬性)。 – sagits