Programmiersprache PHP 7.4 erweitert die Syntax und führt Preloading ein

Zu den Neuerungen gehörten Arrow Functions 2.0, ein Null Coalescing Assignment Operater und Typed Properties 2.0.

In Pocket speichern vorlesen Druckansicht 79 Kommentare lesen
PHP 7.4 erweitert die Syntax und führt Preloading ein
Lesezeit: 5 Min.
Von
  • Rainald Menge-Sonnentag
Inhaltsverzeichnis

Pünktlich zum geplanten Releasedatum ist PHP 7.4 erschienen. Die Programmiersprache bringt einige Neuerungen für Entwickler, darunter ein erweitertes Typsystem mit Typed Properties 2.0, Arrow Functions 2.0 für einzeilige Funktionen und einen Spread-Operator für Arrays. Außerdem kann der Server nun Funktionen beim Start permanent in den Cache laden.

heise Developer hatte bereits beim Erscheinen der ersten Beta ausführlich mit Codebeispielen über die Neuerungen in PHP 7.4 berichtet, und an den wesentlichen Funktionen hat sich erwartungsgemäß nichts geändert. Daher beschränkt sich diese Meldung auf eine Zusammenfassung der wichtigen Ergänzungen.

Arrow Functions bieten eine vereinfachte Schreibweise für anonyme Funktionen, die – explizit in PHP – auch Closures heißen. Sie haben die Schreibweise fn(parameter_list) => expr, und Entwickler können Werte der im Parent Scope definierten Variablen ohne Einsatz von use übernehmen. Eine vor vier Jahren vorgeschlagene Syntax mit der Bezeichnung Short Closures fand keine Zustimmung, und die Arrow Functions 2.0 tragen mit der neuen Syntax den Bedenken Rechnung.

Typed Properties 2.0 erweitern das Typsystem von PHP. Die Sprache kennt bereits seit Version 5 Type Hints, und seit Version 7.2 sind die Typhinweise auch für Elemente erlaubt, die von object abstammen. Mit PHP 7.4 lassen sich nun Typen für Klassen-Properties festlegen. Die Motivation dafür ist vor allem das Verringern von Boilerplate-Code in Form von Getter- und Setter-Methoden zur Typüberprüfung.

Eine weitere Neuerung in PHP 7.4 ist, dass der Spread-Operator für Arrays funktioniert, um zwei Arrays ineinander zu verschachteln. Auch wenn das Verbinden über array_merge ebenfalls möglich ist, erweitert der Spread Operator die Einsatzmöglichkeiten auf beliebige Objekte, die Traversable implementieren. Zudem soll er performanter sein als die array_merge-Methode.

Der neu eingeführte Null Coalescing Assingment Operator ??= kombiniert die null-Prüfung des in PHP 7 eingeführten Null Coalescing Operator ?? mit der Zuweisung zu einer Variable. Damit arbeitet er analog zu Operatoren wie +=.

Mehr Flexibilität bei den Rückgabewerten und Parametern von Funktionen beschreiben die Covariant Returns and Contravariant Parameters. Sie sehen mehr Flexibilität bei den Rückgabewerten beziehungsweise Parametern für Untertypen vor. So kann eine Klasse beim Implementieren eines von der Elternklasse geerbten Interfaces den Rückgabewert genauer spezifizieren, wobei der Typ ein Subtyp des ursprünglichen sein muss. Umgekehrt darf sie den Typ eines Parameters durch einen weniger spezifischen Supertyp ersetzen. Die Neuerung bezieht sich jedoch nur auf von object abgeleitete Typen, nicht auf Kinder von callable.

Eine kleine Ergänzung, die in jüngster Zeit viele Programmiersprachen erhalten haben, ist die Möglichkeit, Unterstriche als Trennzeichen längerer numerischer Literale für unterschiedliche Zahlensysteme zu verwenden, also beispielsweise für den dezimalen Wert 123_000, den hexadezimalen Wert 0xABAB_800F oder die Binärzahl 0b1100_1010.

Eine deutlich bessere Performance soll das Preloading bringen, das das Caching von PHP erweitert. Als Inspiration dient das sogenannte Class Data Sharing der Java HotSpot VM. Entwickler müssen das Preloading explizit in der php.ini-Datei mit opcache.preload aktivieren und ein Preloading-Skript erstellen.

Der Server lädt dann beim Start die entsprechenden Dateien mit allen Klassen und Funktionen in den Cache. Anders als beim herkömmlichen Vorgehen für den OpCache, bei dem er den Sourcecode kompiliert, aber alle Teile separat verwaltet, erkennt der Server beim Preloading die Dependencies und kümmert sich um das Linken der benötigten Abhängigkeiten.

Der Wermutstropfen dabei ist eine geringere Flexibilität: Änderungen am Sourcecode lassen sich nicht einfach einpflegen, sodass bei Modifikationen am über Preloading gecachten Code ein Neustart des Servers erforderlich ist.

Eine weitere Neuerung jenseits der Syntax von PHP ist das Foreign Function Interface (FFI), das eine Schnittstelle zu C-Code analog zum CFFI für Python bildet. Letzteres war auch die Designgrundlage für die Schnittstelle von PHP zu C. Die API erlaubt das Laden von Shared Librarys und den anschließenden Aufruf von C-Funktionen sowie den Zugriff auf C-Datenstrukturen.

Neben den genannten Neuerungen gibt es zahlreiche zusätzliche Ergänzungen wie eine Erweiterung der Reflection-API für Referenzen über ReflectionReference und ein flexiblerer Weg zur Objektserialisierung über die magischen Methoden __serialize und __unserialize.

Weitere Details zu PHP 7.4 lassen sich der offiziellen Ankündigung entnehmen.

Siehe dazu auf heise Developer:

(rme)