مرحبا
Grundsätzlich habe ich das meiste soweit verstanden. Doch einiges wirft mehr fragen auf, als es beantwortet :)
Die Parameter im Konstruktor der Navi-Klasse
class Navi
{
#...
public function __construct(array $links, Navi_Decorator $decorator)
{
# ...
}
}
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")?
$links = array('Home', 'Impressum');
$decorator = new Navi_Decorator(); # Hier wird das Objekt doch bereits instantiiert? Ist das richtig formuliert?
$navi = new Navi($links, $decorator);
$navi->getHtmlMenu();
Nächste Frage wäre:
class Navi_Link
{
public $label = "";
public $url = "";
public $target = "";
}
Die jetzt anstehende Änderung wäre also, anstelle eines simplen Strings in einem Array lieber ein Array von diesen Klassen in die Navigation hinein zu tun.
Wie darf ich ein "Array von diesen Klassen" verstehen? Soll ich jeden einzelnen Link des Menus in einem Objejt speichern?
Wäre das nicht zuviel Overhead, wenn viele Links exisitieren?
- Eine Liste von Links in ein Array zu packen, wenn man doch den Datenbankzugriff ebenfalls objektorientiert erledigen will, ist vielleicht keine so wahnsinnig gute Idee.
Ich habe es bei mir bislang so gelöst, dass ich das Resultat aus der Datenbank direkt als Linkliste speichere, ohne erst in ein Array zu kopieren. Das ist ja noch mit das einfachste.
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.
mfg
Die neuen 4 Jahreszeiten: Frühling, ARSCHLOCH, Herbst und Winter!