0

イメージ $parent; オブジェクトが必要です。

たとえば、次のとおりです。

    $parent->firstname = "Firstname";
    $parent->lastname = "Lastname";
    $parent->children = ???

->これは、後でこれを行うことができるように、オブジェクトのコレクションである必要があります。

    foreach ($parent->children as $child) { 
      $child->firstname
      $child->lastname
    }

これは可能なことですか?

4

2 に答える 2

0

はい、可能です。たとえば、子供をarray.

これは単なる例であり、これは最善の解決策ではありません:

class person
{
    public $firstname = 'Jane';
    public $lastname  = 'Doe';
    public $children  = array();
}

$parent = new person();
$parent->firstname = "Firstname";
$parent->lastname  = "Lastname";

//1st child
$child = new person(); 
$child->firstname = 'aa';
$parent->children[]  = $child;

//2nd child
$child = new person(); 
$child->firstname = 'bb';
$parent->children[]  = $child;        

foreach ($parent->children as $child) {
    ...
}
于 2013-03-07T14:01:14.220 に答える
0

それはあなたが望むものに少し依存します。あなたのタイプは単なるプロパティ オブジェクトなので、 Vahe Shaduntsによるソリューションは最も軽量で簡単だと思います。

PHP をより細かく制御したい場合は、getter と setter を使用する必要があります。これにより、より具体的に機能させることができます。

foreachDocsに関する限り、子オブジェクトが行う必要があるのは、 Iteratororインターフェイスを実装すること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 はこれらの型付きコレクションには強くないため、これを行うための定型コードがかなりあります。

コード要旨

于 2013-03-07T14:54:20.660 に答える