それはあなたが望むものに少し依存します。あなたのタイプは単なるプロパティ オブジェクトなので、 Vahe Shaduntsによるソリューションは最も軽量で簡単だと思います。
PHP をより細かく制御したい場合は、getter と setter を使用する必要があります。これにより、より具体的に機能させることができます。
foreach
Docsに関する限り、子オブジェクトが行う必要があるのは、 Iterator
orインターフェイスを実装することIteratorAggregate
だけであり、内部で使用できますforeach
( Object Iteration Docsを参照)。
次に例を示します。
$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
ここでバックグラウンドで動作するこれらの名前付きインターフェイスとオブジェクト (最後にコードをリンクします) には、より多くの機能が必要な場合 (時間の経過など) に、配列とプロパティだけに比べて特定の利点があります。
Jane が Janet と結婚していて、両方とも同じ子供を共有しているとします。
$janet = ConcretePerson::build('Janet', 'Peach');
$janet->setChildren($janesChildren);
Janet は新しい子を取得します。
$janet->getChildren()->attachPerson(ConcretePerson::build('Feli'));
どちらも同じ子オブジェクトを共有するため、Jane も自動的にそうします。
ただし、PHP はこれらの型付きコレクションには強くないため、これを行うための定型コードがかなりあります。
コード要旨