manu wrote: ↑Thu Nov 01, 2018 8:08 pm
Nein, so gesehen bringt das keine Verbesserung. Aber könnte dann die Klasse nicht gleich statisch definiert sein?
Ja, könnte sie. Aber abgesehen davon, dass der Zug längst abgefahren ist (und wenn wir hier nachbessern wollten, dann würde ich mir eine richtige objekt-orientierte API wünschen, wo jede Seite ein eigenes Objekt ist[1]; wäre damals mit Hinblick auf PHP 4 und 5 Kompatibilität eklig gewesen), sind statische Klassen eher noch weniger schön als Singletons/Monostates[2]. In diesem Fall könnte man sich vorstellen, dass vielleicht einmal Bedarf besteht, auch die Seiten einer Zweitsprache mit der Klasse zu „verwalten”. Dazu könnte man dann einfach dem Konstruktor die gewünschte Sprache als Argument übergeben, und bräuchte sonst keine weiteren Änderungen in den Clients der Klasse vorzunehmen. Bei einer statischen Klasse müsste man statt dessen die Sprache bei jedem einzelnen Methodenaufruf übergeben.
[1] Ich finde, diesen Ansatz sollten wir unbedingt weiter verfolgen. Zum einen wird die API übersichtlicher:
Code: Select all
$my_pages = new XH\Pages;
echo $my_pages->url($my_pages->parent($s));
// vs.
echo (new XH\Pages)->getSelected()->getParent()->getUrl();
Zum anderen könnten noch weitere globale Variablen (wie im Beispiel $s) verkapselt werden, so dass wir sie vielleicht irgendwann mal ganz loswerden können.
[2] Ich persönlich würde aus heutiger Sicht nur dann statische PHP-Klassen schreiben, wenn sie zustandslos sind (also keine Eigenschaften haben), und das auch nur wegen des für Funktionen (noch) nicht möglichen Autoloadings.