XH\Pages Verständnisfrage

Ein CMSimple Support Forum für deutsch sprechende Nutzer und Entwickler
Post Reply
manu
Posts: 1086
Joined: Wed Jun 04, 2008 12:05 pm
Location: St. Gallen - Schweiz
Contact:

XH\Pages Verständnisfrage

Post by manu » Thu Nov 01, 2018 5:47 pm

Ich versuche, auf einer Seite, den Link zur Elternseite auszugeben. Dafür gibt es jetzt ja die XH\Pages Klasse.
Erkenntnis 1: Ich kann XH\Pages::parent() nicht statisch aufrufen, ist ok.
Also:

Code: Select all

$my_pages = new XH\Pages;
echo $my_pages->url($my_pages->parent($s));
Klappt ja.
Wenn ich da weiter drüber nachdenke, stelle ich mir die Frage: Solch ein Objekt ist ja ziemlich zentral beim Seitenaufruf. Gibt es da nicht von Haus aus schon eine globale Instanz?

cmb
Posts: 14225
Joined: Tue Jun 21, 2011 11:04 am
Location: Bingen, RLP, DE
Contact:

Re: XH\Pages Verständnisfrage

Post by cmb » Thu Nov 01, 2018 6:42 pm

manu wrote:
Thu Nov 01, 2018 5:47 pm
Wenn ich da weiter drüber nachdenke, stelle ich mir die Frage: Solch ein Objekt ist ja ziemlich zentral beim Seitenaufruf. Gibt es da nicht von Haus aus schon eine globale Instanz?
Nein, gibt es nicht. Zum einen ist XH\Pages ist ein Monostate (statt statischer Klassenvariablen werden eben die ohnehin existieren globalen Variablen verwendet); zum anderen brächte eine globale Variable auch keine notationellen Vorteile:

Code: Select all

$my_pages = new XH\Pages;
echo $my_pages->url($my_pages->parent($s));
// vs.
global $xh_pages;
echo $xh_pages->url($xh_pages->parent($s));
Und was die Performance angeht, dürfte sich das auch nicht viel nehmen.
Christoph M. Becker – Plugins for CMSimple_XH

manu
Posts: 1086
Joined: Wed Jun 04, 2008 12:05 pm
Location: St. Gallen - Schweiz
Contact:

Re: XH\Pages Verständnisfrage

Post by manu » Thu Nov 01, 2018 8:08 pm

cmb wrote:
Thu Nov 01, 2018 6:42 pm
manu wrote:
Thu Nov 01, 2018 5:47 pm
Wenn ich da weiter drüber nachdenke, stelle ich mir die Frage: Solch ein Objekt ist ja ziemlich zentral beim Seitenaufruf. Gibt es da nicht von Haus aus schon eine globale Instanz?
Nein, gibt es nicht. Zum einen ist XH\Pages ist ein Monostate (statt statischer Klassenvariablen werden eben die ohnehin existieren globalen Variablen verwendet); zum anderen brächte eine globale Variable auch keine notationellen Vorteile:

Code: Select all

$my_pages = new XH\Pages;
echo $my_pages->url($my_pages->parent($s));
// vs.
global $xh_pages;
echo $xh_pages->url($xh_pages->parent($s));
Und was die Performance angeht, dürfte sich das auch nicht viel nehmen.
Nein, so gesehen bringt das keine Verbesserung. Aber könnte dann die Klasse nicht gleich statisch definiert sein?

cmb
Posts: 14225
Joined: Tue Jun 21, 2011 11:04 am
Location: Bingen, RLP, DE
Contact:

Re: XH\Pages Verständnisfrage

Post by cmb » Thu Nov 01, 2018 10:47 pm

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.
Christoph M. Becker – Plugins for CMSimple_XH

Post Reply