In diesem Forum gibt es Starthilfe zum neuen Extension-System von phpBB 3.1/3.2. Fragen zur Entwicklung von Extensions und zur Konvertierung von phpBB 3.0.x MODs sind ebenfalls willkommen.
Mir ist aufgefallen das es Erweiterungen gibt die in der class ext Konstanten definieren.
z.B. Board Announcements und Advanced BBCode Box
Diese Konstanten werden meist im ACP html Template, ACP php-Code und in der Migration verwendet.
Ist dies die einzige Möglichkeit, Konstanten, die in der gesamten Erweiterung verfügbar sein sollen, einmalig zu definieren?
Ahja, diesen Weg kannte ich jetzt noch nicht. Merci! Auch eine Idee, wozu man ext.php nutzen kann.
Ich habe erst kürzlich (2024) bei der Entwicklung von Limit Multiple Replies noch einen weiteren Weg kennengelernt: über den Class Loader von Symfony, sprich, per YAML Konfig. Hier die Ext (Deny double post) die mir als Basis für LMR diente, da habe ich das zum ersten Mal wahrgenommen:
Hab mir die Erwähnung der ext.php Methode von Thorsten jetzt auch mal in der Praxis angeschaut und einfach bei einer Ext (EMP) ausprobiert. Die Erkenntnisse dabei mal zusammengefasst:
YAML Methode:
Neben der eigentlichen Definition benötigt man pro Klasse noch einen Klassen Parameter für den Konstruktor. Habe ich eine Konstante die in 3 Klassen benötigt wird, sind es also 4 Einträge in der YAML Datei.
Zusammengefasst:
YAML:
1 Zeile im parameters: Block der YAML Datei pro Konstante.
1 Parameter pro Klasse (wo die Konstante eben benötigt wird) in der YAML Datei.
PHP:
1 Zeile mit Deklaration einer Klassenvariable pro Konstante.
1 Konstruktor Parameter pro Konstante.
1 Zuweisung des Konstruktor Parameters an die Klassenvariable pro Konstante.
Sonstiges: Nachteil der Methode an sich: Werden Konstanten geändert, muss der Cache gelöscht werden. Das ist umständlich und kostet extra Zeit, zumindest während Entwicklung.
ext.php Methode:
Der Aufwand ist hier deutlich geringer und die Handhabung komfortabler. Alleine schon dadurch, dass ich nicht umständlich den Cache löschen muss.
Zusammengefasst:
ext.php:
1 Zeile mit kombinierter Deklaration und Definition in der ext Klasse mittels public const pro Konstante.
PHP:
1 Zeile mit use um die ext Klasse in den Namensraum der jeweiligen Klasse einzubinden.
Sonstiges: Zugriff auf die Konstante erfolgt dann mit dem Präfix ext::.
Alles in allem, ist der Weg den Thorsten gezeigt hat, der deutlich "natürlichere" und elegantere Weg. Die YAML Methode mutet reichlich umständlich an. Und zumindest für mich gibts eh keine Frage ob ext.php schon vorhanden ist, weil das für mich Standard ist; wegen Prüfung der Voraussetzungen. Und da muss ich auch nicht mit zig Deklarationen in der Klasse hantieren, sondern binde einmal die ext Klasse ein und fertig bin ich damit.