Hallo,
Das meiste in deinem Bsp. ist selbstredend, nur der 2. Parameter. Warum steht da die Klasse Navi_Decorator drin, diese wird doch später als neues Objekt Seperat aufgerufen? Und wie nennt sich die Schreibweise für diese Parameter, also das neben der Variable "array" steht, oder der Klassenname (hier "Navi_Decorator")?
Das sind Type Hints http://php.net/manual/en/language.oop5.typehinting.php und nur dazu da dass man weiß welchen Typ diese Argumente sein sollten.
Wie darf ich ein "Array von diesen Klassen" verstehen? Soll ich jeden einzelnen Link des Menus in einem Objejt speichern?
Ja ganz genau.
Wäre das nicht zuviel Overhead, wenn viele Links exisitieren?
Nein, darüber brauchst du dir keine Gedanken machen, schon gar nicht bei PHP.
Außerdem bietet PHP die Möglichkeit, dass Objekte ebenfalls mit "foreach" durchlaufen werden können, indem man das Iterator- oder das IteratorAggregate-Interface implementiert. Man würde also kein Array mehr in "Navi" hineingeben, sondern ein iterierbares Objekt "Navi_Linklist", welches dann einzelne "Navi_Link"-Objekte ausspuckt.
Hier stehe ich komplett auf den Schlauch.
PHPs foreach funktioniert nicht nur mit array sondern mit jedem Objekt das das IteratorAggregate-Interface implementiert (array tut das auch).
Ich spekuliere jetzt über die exakte implementation aber das sollte es vielleicht etwas klarer machen, foreach könnte man auch so implementieren (die methode next() ist hier beschrieben http://www.php.net/manual/en/class.iterator.php):
$my_array = array(1,2,3,4);
$iterator = $my_array.getIterator();
while($item = $iterator.next()) {
echo $item;
}
wäre das gleiche wie:
$my_array = array(1,2,3,4);
foreach($my_array as $item) {
echo $item;
}
Das gibt es übrigens in so ziemlich allen anderen Sprachen z.B. Java
Jeena