Bonjour à tous,

Y a un paquet de doc qui traine sur le sujet de la spl et de ses iterateurs, mais on revient souvent vers la meme chose: les parcours de repertoires...

J'ai lu l'article de Julien Pauli à ce propos... mais rien y fait, ça ne veut pas rentrer...

Voici mon problème.

J'ai un objet Composite, qui est composé de... Composants (tadam!)
Sachant que mon Composite est aussi un Composant, je peux avoir des Compsites de Composites de Composites ... classique.

J'aimerais pouvoir parcourir cette arborescence avec un seul foreach à l'aide de RecursiveIterator et tout ce qui tourne autour mais j'y entrave rien.

Voici mon code:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
 
<?php
 
class Composant {
  function __construct($id) {
    $this->id = $id;
  }
}
 
class Composite extends Composant {
  protected $sub = array();
  public function add($o) {
    $this->sub[] = $o;
  }
}
 
$a = new Composite("a");
$b = new Composite("b");
$c = new Composant("c");
$d = new Composant("d");
$e = new Composite("e");
$f = new Composant("f");
 
// f, a(c, b(d), e)
$a->add($c);
$a->add($b);
$a->add($e);
$b->add($d);
 
// les racines de ma foret de composants
$tablo = array($f, $a);
 
$iterator = new RecursiveArrayIterator($tablo);
foreach ($iterator as $o) {
  echo $o->id.PHP_EOL;
}
ça me donne actuellemen ceci:
J'aimerai obtenir ceci:
avec un seul foreach, en implémentant les bonnes interface et en instanciant les bons itérateurs qui vont bien...

Quelqu'un peut m'aider?