2012-04-26 156 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