Seite 1 von 1

Konstanten in ext.php

Verfasst: 19.04.2025 19:21
von IMC
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?

Re: Konstanten in ext.php

Verfasst: 19.04.2025 19:39
von LukeWCS
Ahja, diesen Weg kannte ich jetzt noch nicht. Merci! :D 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:

Konstante definieren:

https://github.com/phpbb-de/phpbb-ext-d ... ces.yml#L2

Konstante referenzieren:

https://github.com/phpbb-de/phpbb-ext-d ... ts.php#L56

So kann man "globale" Konstanten in jeder Klasse seiner Ext nutzen.

Re: Konstanten in ext.php

Verfasst: 19.04.2025 20:02
von IMC
LukeWCS hat geschrieben: 19.04.2025 19:39 Ahja, diesen Weg kannte ich jetzt noch nicht.
Dann bin ich da ja nicht alleine.
LukeWCS hat geschrieben: 19.04.2025 19:39 über den Class Loader von Symfony
Das habe ich tatsächlich mal verwendet.
https://github.com/IMC-GER/phpBB-Curren ... .yml#L1-L2
Hätte ich nicht gebraucht, wenn ich zu der Zeit schon die Tabelle config_text gekannt hätte.

Re: Konstanten in ext.php

Verfasst: 19.04.2025 20:32
von LukeWCS
Dann würde ich sagen:

Ist ext.php sowieso vorhanden?

Ja: das nutzen für "persönliche" globale Konstanten.
Nein: YAML Konfig nutzen.

Re: Konstanten in ext.php

Verfasst: 20.04.2025 08:26
von Mike-on-Tour
IMC hat geschrieben: 19.04.2025 19:21 Mir ist aufgefallen das es Erweiterungen gibt die in der class ext Konstanten definieren.
Das war mir auch neu, Danke für den Hinweis, werde ich mir merken.

Re: Konstanten in ext.php

Verfasst: 20.04.2025 12:10
von LukeWCS
Mahlzeit Kollegen und schöne Ostern

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.