這取決於一點你想要什麼。由於你的類型只是屬性對象,我認爲Vahe Shadunts的解決方案是最輕量級和最簡單的。
如果你想在PHP中獲得更多的控制權,你需要使用getter和setter。這將使您可以使其更具體。
至於foreach
Docs而言,所有的子對象需要做的是落實Iterator
或IteratorAggregate
接口,它可以再裏面foreach
使用(見Object IterationDocs)。
下面是一個例子:
$jane = ConcretePerson::build('Jane', 'Lovelock');
$janesChildren = $jane->getChildren();
$janesChildren->attachPerson(ConcretePerson::build('Clara'));
$janesChildren->attachPerson(ConcretePerson::build('Alexis'));
$janesChildren->attachPerson(ConcretePerson::build('Peter'));
$janesChildren->attachPerson(ConcretePerson::build('Shanti'));
printf(
"%s %s has the following children (%d):\n",
$jane->getFirstname(),
$jane->getLastname(),
count($jane->getChildren())
);
foreach($janesChildren as $oneOfJanesChildren)
{
echo ' - ', $oneOfJanesChildren->getFirstname(), "\n";
}
輸出:
Jane Lovelock has the following children (4):
- Clara
- Alexis
- Peter
- Shanti
,在這裏的後臺工作,這些命名的接口和對象(我在最後的代碼鏈接)有一定的好處相比,只需要數組和屬性(如果需要更多功能)(例如,隨着時間的推移)。
比方說,珍結婚與珍妮特所以他們都共享同一個孩子,讓雙方分享:
$janet = ConcretePerson::build('Janet', 'Peach');
$janet->setChildren($janesChildren);
現在,珍妮特得到一個新的子:
$janet->getChildren()->attachPerson(ConcretePerson::build('Feli'));
而且會自動完成簡,因爲兩者共享相同的兒童對象。
但是PHP對於這些類型集合並不是很強大,因此您有相當多的樣板代碼來完成這些工作。
code gist
'$ parent-> children'應該是_array_對象。孩子們從哪裏來?這會影響你初始化數組的方式。 – 2013-03-07 13:57:13
你真的應該使用getter和setter方法。不直接將值存儲到屬性。 – 2013-03-07 14:00:16
請參閱:[PHP中的類內對象數組](http://stackoverflow.com/questions/7812198/array-of-objects-within-class-in-php) – hakre 2013-03-07 14:01:29