2012-04-26 220 views
1

假設你有這個數組對象:循環通過對象

array 
0 => 
object(User\Entity\User)[297] 
    public 'id' => int 1 
    private 'first_name' => string 'Peter' (length=5) 
    private 'last_name' => string 'Johnson' (length=7) 
    private 'initials' => string 'J.J.' (length=4) 
    private 'email' => string '[email protected]' (length=21) 
1 => 
object(User\Entity\User)[296] 
    public 'id' => int 2 
    private 'first_name' => string 'Edith' (length=8) 
    private 'last_name' => string 'Peters' (length=7) 
    private 'initials' => string 'R.J.' (length=4) 
    private 'email' => string '[email protected]' (length=26) 

現在我想將它們放在一個表。但是因爲我想讓它具有普遍性,所以我試圖以抽象的方式來做到這一點。

我在下面的函數中有一個$ aColnames數組,只能顯示我想要在表中看到的字段的值。

這方法我想建立:

private function generateTable() 
{ 

    foreach($this->aData as $aData){ 
     $this->sTable.= '<tr>'; 
     foreach($this->aColnames as $sColname){ 
      $this->sTable.= '<td>'; 
/****What code goes here ****/ 
       $this->sTable.= '</td>'; 
     } 
      $this->sTable.= '</tr>'; 
     } 
    } 

的問題是沒有我如何從對象獲取值?我是否需要每次都實例化對象?任何人都可以幫我嗎?

+0

你可能想要公開你的屬性,否則你將無法在你的函數中訪問它們。 – 2012-04-26 18:47:00

+0

如果對象沒有實例化,它們將不存在,所以我有問題來理解詢問實例化問題的部分。 – hakre 2012-04-26 22:41:14

+0

'generateTable()'活在哪裏?它是否在基類(例如'\ User \ Entity')中,還是在一個完全獨立的類中實現? – 2012-04-26 22:44:21

回答

1

不,您不需要再次實例化對象。當你首先將它們放入數組中時,它們會被實例化!

然而,您需要聲明這些變量是公開的,以便它們可以被訪問,或者具有某種getter函數。

+0

您不一定需要公開屬性。您可以提供一個'__get($ property)'實現,該實現允許檢索屬性值,而無需調用代碼更改這些屬性的值。 – cspray 2012-04-26 18:56:40

+0

@CharlesSprayberry:是的,這也是一種可能性。雖然我不想混淆這個(可能)新的PHP程序員,並且在他的代碼/思維/任何方面引發一些更復雜的問題。 – 2012-04-26 18:57:33