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.
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.
Sein oder Nullsein, das ist hier die Frage
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
.
Einfacher kombiniert
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 Syntax mit dem Pfeil
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;
Flexiblere Vererbung
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
.
Kontakt zur AuĂźenwelt
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.
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)