Skriptsprache: PHP 7.4 ist Feature Complete

Mit der Veröffentlichung der ersten Beta von PHP 7.4 stehen die Neuerungen fest. Das fertige Release ist für November geplant.

In Pocket speichern vorlesen Druckansicht 15 Kommentare lesen
Skriptsprache: PHP 7.4 ist Feature Complete
Lesezeit: 5 Min.
Von
  • Rainald Menge-Sonnentag
Inhaltsverzeichnis

Gut einen Monat nach dem Start der Alpha-Phase ist nun die erste Beta von PHP 7.4 erschienen, die gleichzeitig den Feature Freeze markiert. Weitere Neuerungen wird es also bis zur Freigabe der für November geplanten fertigen Variante nicht mehr geben. Die Sprachergänzungen in PHP 7.4 dienen vor allem der besseren Übersicht und Performance.

Nennenswert ist die Erweiterung des Typsystems: Die sogenannten Typed Properties 2.0 sollen vor allem Boilerplate-Code verringern, da sich damit Typen für Klassen-Properties festlegen lassen. Das erspart Entwicklern das Schreiben von Getter- und Setter-Methoden zur Typüberprüfung, wie der zugehörige PHP RFC (Request for Comments) mit einem Codebeispiel zeigt.

Ebenfalls der besseren Lesbarkeit und dem kompakteren Code dient der sogenannte Null Coalescing Assignment Operator ??=, der analog zu Operatoren wie += die null-Prüfung und Zuweisung kombiniert, wie in folgendem Beispiel aus dem RFC:

// Prüft den Eintrag auf null und weist in dem Fall 'value' zu
$this->request->data['comments']['user_id'] =
$this->request->data['comments']['user_id'] ?? 'value';

// Daselbe in Kurzform mit ??=
$this->request->data['comments']['user_id'] ??= 'value';

Eine kleine Ergänzung, die in jüngster Zeit viele Programmiersprachen wie zuletzt Scala 2.13 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.

Neu ist zudem die Ausweitung des Spread-Operators auf Arrays, wie in folgendem Codebeispiel aus dem RFC:

$parts = ['Apfel', 'Birne'];
$fruits = ['Banane', 'Orange', ...$parts, 'Wassermelone'];
// ['Banane', 'Orange', 'Apfel', 'Birne', 'Wassermelone'];

Der Spread-Operator arbeitet sowohl für die herkömmliche Array-Syntax mit array() als auch über die im Beispiel verwendete Kurzform mit eckigen Klammern. Der RFC hebt als Vorteil gegenüber array_merge die bessere Performance des Sprachkonstrukts im Vergleich zu Funktion hervor und andererseits die erweiterte Einsatzmöglichkeit, da sich nicht nur andere Arrays, sondern beliebige Objekte, die Traversable implementieren, über den Spread-Operator einbinden lassen.

Die als Arrow Functions 2.0 bezeichnete Schreibweise für anonyme Funktionen beziehungsweise Closures sollen die dafür verwendete Syntax vereinfachen. Ein ähnlicher Vorschlag unter dem RFC-Namen Short Closures fand seinerzeit keine Zustimmung, und der neue RFC trägt den damaligen Bedenken Rechnung. Arrow Functions haben die Syntax fn(parameter_list) => expr.

Zu bemerken ist, dass die Werte der im Parent Scope definierten Variablen implizit ohne Einsatz von use übernommen werden. Außerdem erlaubt die Syntax unter anderem das Festlegen von Parametern oder Rückgabetypen, wie die Beispielliste unterschiedlicher Definitionen aus dem RFC zeigt:

fn(array $x) => $x;
fn(): int => $x;
fn($x = 42) => $x;
fn(&$x) => $x;
fn&($x) => $x;
fn($x, ...$rest) => $rest;

Der RFC mit dem sperrigen Namen Covariant Returns and Contravariant Parameters sieht mehr Flexibilität bei den Rückgabewerten beziehungsweise Parametern für Untertypen vor. So kann beispielsweise eine Klasse beim Implementieren eines Interfaces den Rückgabewert genauer spezifizieren:

interface Factory {
function make(): object;
}

class UserFactory implements Factory {
function make(): User;
}

Für Rückgabewerte gilt, dass der Typ ein Untertyp des ursprünglichen ist, ihn also strenger spezifiziert. Für Parametertypen gilt die umgekehrte Regel, dass sie weniger spezifisch sein dürfen. Die Neuerung bezieht sich jedoch nur auf von object abgeleitete Typen, nicht auf Kinder von callable.

Besonders erwähnenswert ist das Foreign Function Interface (FFI), das eine Schnittstelle zu C-Code analog zu Python bildet. Das Python/CFFI diente dem zugehörigen RFC als Designgrundlage. Die API erlaubt das Laden von Shared Librarys und den anschließenden Aufruf von C-Funktionen und den Zugriff auf C-Datenstrukturen. Details zum Einsatz lassen sich den Codebeispielen im RFC entnehmen.

Die vollständige Liste der Neuerungen in PHP 7.4 findet sich ebenso wie die als überholt geltenden Funktionen (Deprecations) in der RFC-Übersicht auf PHP.net. Oberhalb der Neuerungen für das aktuelle Release ist auf der Seite bereits eine Vorschau der für PHP 8.0 geplanten Features sichtbar, womit die Skriptsprache unter anderem einen JIT-Compiler (Just in Time) erhalten soll.

Mehr Infos

Vom 6. bis 8. November findet in Dortmund die PHP.RUHR 2019 statt. Dieses Jahr präsentieren die Veranstalter die Entwicklerkonferenz in einem erweiterten Gewand mit einem vorgeschalteten Workshop-Tag und mehr Vorträgen. heise Developer ist zum ersten Mal als Partner an der Konferenz beteiligt, die sich zahlreichen Themen rund um die Skriptsprache mit ihren Neuerungen und ihrem Praxiseinsatz widmet.

Die Roadmap für PHP 7.4 sieht noch zwei weitere Betaversionen und im Anschluss sechs Release Candidates vor. Das endgültige Release ist für den 28. November geplant. (rme)