مرحبا
OOP wird nicht leichter, wenn man was anderes macht
Ja stimmt, du machst es mir aber auch nicht unbedingt leicht ;)
Dirk hat nur eine Funktion in seinem Artikel gehabt. Den in ein OOP-Beispiel umzusetzen ist nicht sehr leicht. Oder schwer - dann aber nicht wirklich OOP. :)
Frei nach deiner Empfehlung, alle Funktionen in Klassen zu packen :) So kleine helferlein, wie das Bsp. von Dirk, habe ich mittlerweile dutzende, aber eben nur als Funktionen.
- Deine Klasse benötigt ein Konfigurationsobjekt, mit dem die Liste der User-Agent-Werte ausgelesen werden kann, und diese Klasse kann wiederum Unterobjekte benutzen, um sich z.B. an INI-Dateien, XML-Dateien oder Datenbanken anzudocken - oder auch ganz normale PHP-Arrays in Include-Dateien auslesen.
Ich versuche noch die Basics zu verinnerlichen, wie soll ich bei dieser Aufgabenstellung auch nur Ansatzweise durchsteigen?
- Eigentlich sollte man hier lieber ein Request-Objekt haben, in dem die aktuellen Zustände des laufenden HTTP-Requests vom Browser gekapselt sind.
Also eine Klasse, die alle HTTP-Requests gespeichert hält? Wäre eigentlich Praktisch.
- Am Ende noch ein wenig Codekritik zu den Namen der Methoden: Wir haben "isMobile" und "GetDevice" - einmal klein und einmal groß.
Soll ich einfach nur Konsequent bei einer Schreibweise bleiben, oder gibt es eine Empfohlene?
Ich habe mir nochmal die Menuklasse angesehen, wenn jetzt kein Iterator-Zeugs kommt, ist das, was du gepostet hast, ja Super einfach. Schwer wird es nur mit den ganzen zusatzaufgaben, die du hinten dranhängst.
Können wir nicht Schritt für Schritt arbeiten?
Ich würde die Klasse mit meinem Aktuellen Kenntnisstand so verwenden:
<?php
# Muss diese Klasse in eine Externe Datei, oder gehört diese Klasse direkt zur Klasse Navi?
class Navi_Decorator
{
# Liste erzeugen
public function buildList($id, $list)
{
return sprintf('<ul id="%s">%s</ul>', $id, $list);
}
# Links erzeugen
public function getHtmlLink($link, $label)
{
return sprintf('<li><a href="%s">%s</a></li>', $link, htmlspecialchars($label));
}
# Link zur Aktiven Seite "entlinken"
public function getHtmlActiveSite($label)
{
return sprintf('<li>%s</li>', htmlspecialchars($label));
}
}
class Navi
{
private $_links;
private $_decorator;
private $_activelink;
public function __construct(array $links, Navi_Decorator $decorator, $active)
{
$this->_links = $links;
$this->_decorator = $decorator;
$this->_activelink = $active;
}
public function getHtmlMenu($id)
{
$menustring = '';
foreach ($this->_links as $link => $label)
{
if ($this->_activelink == $link)
$menustring .= $this->_decorator->getHtmlActiveSite($label);
else
$menustring .= $this->_decorator->getHtmlLink($link, $label);
}
return $this->_decorator->buildList($id, $menustring);
}
}
# Die erzeugung der Links kann ja erstmal warten, bis ich die vorherigen Prozesse verstanden habe
$links = array('/' => 'Home'
,'/impressum' => 'Impressum'
,'/kontakt' => 'Kontakt');
$decorator = new Navi_Decorator();
$navi = new Navi($links, $decorator, $_SERVER['REQUEST_URI']); # REQUEST_URI zum entlinken der Aktiven Seite
echo $navi->getHtmlMenu('mymenu'); # Parameter: <ul id="mymenu">LIST</ul>
mfg
Die neuen 4 Jahreszeiten: Frühling, ARSCHLOCH, Herbst und Winter!