Seite 1 von 1

PHP 8 - Constructor Property Promotion

Verfasst: 28.09.2025 15:06
von LukeWCS
Thorsten, wegen 8.0 und dem Feature davon, welches ich explizit ansprechen wollte: Constructor Property Promotion, das ermöglicht eine erheblich kompaktere Klassen-Einleitung. Dazu vorab ein Beispiel anhand EMP 3.1.0, wo ich das bereits einsetze. Markiert habe ich jeweils den relevanten Teil:

Klassische Notation mit PHP <8.0 - EMP 3.1.0-b17:
https://github.com/LukeWCS/ext-mgr-plus ... hp#L25-L78

PHP 8.0 Notation - EMP 3.1.0-b19:
https://github.com/LukeWCS/ext-mgr-plus ... hp#L25-L50

Die normale Notation braucht hier 54 Zeilen, die kompakte nur 26. Zur Erklärung ein vereinfachtes Schema einer typischen Ext-Klasse:

Code: Alles auswählen

class something_special
{
	// Block A: Deklaration der Klassen-Eigenschaften

	public function __construct
	(
		// Block B: Deklaration der Konstruktor-Parameter
	)
	{
		// Block C: Zuweisung der Konstruktor-Parameter an die Klassen-Eigenschaften
	}

...
}
Bei Constructor Property Promotion entfällt Block A, weil es mit Block B quasi kombiniert notiert werden kann. Und Block C entfällt, weil es implizit durch Block B ausgeführt wird. In meinem Beispiel habe ich in der Konstruktor Funktion nur noch Zuweisungen von rein lokalen Klassen-Eigenschaften. Es kann auch vorkommen, dass die Konstruktor Funktion (Block C) komplett leer bleibt, nämlich dann, wenn eine Klasse nur importiert, aber keine lokalen Klassen-Eigenschaften benötigt. Das dürfte bei üblichen phpBB Exts aber eher selten sein.

edit: Offizielle Vorstellung: https://www.php.net/releases/8.0/de.php ... -promotion

Re: PHP 8 - Constructor Promotion

Verfasst: 28.09.2025 16:30
von IMC
Hi Patrick,
das finde ich gut. Nicht nur, weil ich wieder etwas dazugelernt habe – bis eben kannte ich dieses Konstrukt nicht –, sondern auch, weil es viel Tipperei erspart.
Das Schöne an PHP 8 ist auch das Komma in der letzten Zeile. In 50 % aller Fälle vergesse ich, das Komma in der vorletzten Zeile zu ergänzen, wenn ich etwas hinzufüge.

Re: PHP 8 - Constructor Property Promotion

Verfasst: 28.09.2025 17:26
von LukeWCS
Hatte ich noch nirgends im phpBB Umfeld gesehen, darum wollte ich das mal erwähnen. Was Komma angeht, das war eines der ersten 8er Features, welches ich eingesetzt hatte. Dieses kleine aber feine Feature hat 2 Vorteile speziell bei vertikaler Deklaration von Funktionsparametern: einfache Wartbarkeit und quasi einheitliche Darstellung aller Zeilen.

Re: PHP 8 - Constructor Property Promotion

Verfasst: 29.09.2025 14:14
von Mike-on-Tour
Hallo Patrick,
Danke für die Vorstellung dieses PHP 8.x Features, das ich bis dato nicht kannte. Habe es eben mal ausprobiert und es spart in der Klassendeklaration und im Konstruktor jede Menge Zeilen.
Ich werde das jetzt nach und nach in meine Erweiterungen übernehmen, die mindestens PHP 8.0 benötigen.

Re: PHP 8 - Constructor Property Promotion

Verfasst: 29.09.2025 20:32
von LukeWCS
nAbend Mike, gerne. Es kann eh kein Mensch wirklich alle Features von PHP kennen, das ist unmöglich, dazu ist die Sprache viel zu komplex. Manchmal entdeckt man in der Doku was interessantes was man gut brauchen kann, oder man sieht bei Kollegen eine elegante Lösung für ein Problem mit Technik, die man noch nicht kannte.

Werde das auch konsequent in allen anderen Exts umsetzen, EMP war der Anfang.