News

PHP 8: Das sind die Pläne für das Major-Release

(Volodymyr Burdiak/Shutterstock)

Lesezeit: 4 Min.
Artikel merken

Ende 2020 soll die Programmiersprache PHP ein Major Update erhalten. Für Version 8 sind neben einem JIT-Compiler für deutlich mehr Performanz auch beliebige Union-Types, static-Return-Types, konsistente Type Errors für vereinfachtes Type-Handling und seit Kurzem auch Named Arguments bestätigt.

Auf seinem Blog führt PHP-Entwickler Brent Roose eine fortlaufende Liste der geplanten und beschlossenen Neuerungen für das nächste Major Release von PHP. Die neue Version ist momentan „under very active development“, der erste Alpha-Release ist bereits raus. Bis zum Final-Release Ende des Jahres werden sich also wohl noch einige weitere Änderungen ergeben. Den Blogpost will Roose bis dahin regelmäßig aktualisieren.

JIT-Compiler

Unter den bereits beschlossenen Neuerungen ist ein Just-in-Time-Compiler, der für deutlich mehr Performanz sorgen soll – wenn auch wohl eher weniger im Kontext von Web Requests. Dahinter steckt Folgendes:

PHP ist, anders als Rust, C oder Java, eine interpretierte Sprache. Der Code wird nicht kompiliert, sondern während der Laufzeit Zeile für Zeile interpretiert, das heißt, für die CPU in Maschinencode übersetzt. Der JIT-Compiler soll Teile eures PHP-Codes künftig während der Laufzeit kompilieren. Vorstellen könnt ihr euch das wie eine gecachte Version des interpretierten Codes, die während der Laufzeit erstellt wird. Wie das funktioniert? Der JIT-Compiler verfügt über eine Funktion, die den Code während der Laufzeit überwacht. Teile davon, die mit hoher Frequenz wiederholt ausgeführt werden, können dann zu optimiertem Maschinencode kompiliert und anstelle des eigentlichen Codes on the fly verwendet werden. Für einen Deep Dive in die Thematik sei euch dieser Crashkurs von Mozilla ans Herz gelegt.

Named Arguments

Zuletzt für den kommenden Release von PHP 8 bestätigt wurden sogenannte Named Arguments. Die Neuerung wurde erst kürzlich in einem separaten Blogpost zum Release bekannt gegeben. Das Feature wird auch Named Parameters genannt und seine Aufnahme in den kommenden Major Release wurde im Vorfeld kontrovers diskutiert. Named Arguments machen euren Code flexibler und ermöglichen es, saubereren Code zu schreiben – ein Vorteil, der Sorgen um Abwärtskompatibilität und aufgeblasene APIs laut Blogpost-Verfasser Brent-Roose schlussendlich überwiege.

Fast fertig!

Bitte klicke auf den Link in der Bestätigungsmail, um deine Anmeldung abzuschließen.

Du willst noch weitere Infos zum Newsletter? Jetzt mehr erfahren

Named Arguments erlauben euch zukünftig, Eingabedaten anhand des Parameternamens an eine Funktion zu übergeben.

setcookie(
name: 'test',
expires: time() + 60 * 60 * 2,
);

Vorher war das nur über die Parameterabfolge möglich. Auch sogenanntes Array-Spreading wird von dem neuen Feature unterstützt:

$data = new CustomerData(...$customerRequest->validated());

Weitere wissenswerte Details dazu könnt ihr im zugehörigen Blogpost nachlesen.

Union Types

Union Types sind eine Zusammenfassung – oder Union – zweier oder mehrerer Typen, über die angezeigt wird, dass alle in der Union genannten Typen verwendet werden können, zum Beispiel so:

public function foo(Foo|Bar $input): int|float;

static wird zum validen Return Type

static ist ein spezieller Klassenname in PHP, der die Klasse referenziert, auf die eine Methode aufgerufen wird, auch wenn die Methode vererbt ist. In PHP 8 wird static neben self und parent zum validen Return Type. PHP ist dynamisch typisiert. Es ist anzunehmen, dass sich sowohl für Unions als auch für static-Return-Types eine ganze Reihe von Use-Cases finden.

Weak Maps

In PHP 7.4 wurden schwache Referenzen, sogenannte weakrefs hinzugefügt. Darüber können Referenzen zu Objekten hergestellt werden, die den Garbage Collector nicht davon abhalten, diese Objekte zu zerstören. WeakMaps sind quasi die Fortführung dieser Funktionalität.

Von Nutzen ist das zum Beispiel im Fall von ORM, wo aus Performanzgründen oft Caches implementiert werden, die Entitätsklassen referenzieren. Solange ein Cache ein solches Objekt referenziert, konnte es vor Version 7.4 nicht vom Garbage Collector aus dem Speicher gelöscht werden – auch dann nicht, wenn es ausschließlich vom Cache referenziert wurde. Über schwache Referenzen und Weak Maps lässt sich festlegen, dass solche Objekte gelöscht werden, sobald nur noch der Cache sie referenziert. Im Fall von ORM, wo oft sehr viele Entitäten in einem Request gemanagt werden, bieten Weak Maps eine ressourcenschonende Art des Umgangs mit diesen Objekten.

Syntax-Tweaks

Mit der Uniform Variable Syntax RFC wurden einige Inkonsistenzen in PHPs Variablensyntax ausgebügelt. Für PHP 8 sind weitere Anpassungen angedacht für Fälle, die dabei übersehen wurden.

Seit PHP 5.5 erlaubt die ::class-Synax das Fetchen von Klassennamen als Strings. Die syntaktische Ähnlichkeit führte wohl vorher verbreitet zu der Annahme, dass  auch $object::class funktioniert. Um den Namen der Klasse eines Objektes zu fetchen, braucht es allerdings bislang folgende Syntax: get_class($object). In V8 soll derartiger Code

$foo = new Foo();
var_dump($foo::class);

künftig dasselbe bewirken.

Sonstige Neuerungen

In Version 8 wird es euch möglich sein, DateTime– und DateTimeImmutable-Objekte jeweils ineinander zu konvertierten. Außerdem neu: Die fdiv-Funktion, die das Teilen durch 0 ermöglicht. Anstelle einer Fehlermeldung bekommt ihr in V8 fallabhängig INF, -INF, oder NAN zurück. Auf Wunsch und dank der Mitarbeit der PHP-Community werden in PHP 8 korrekte Typenannotationen für interne Funktionen und Methoden hinzugefügt. Und: Auch für interne Funktionen werden in Version 8 zukünftig Type Errors anstelle von null und einer Warnung ausgegeben. Zudem werden eine ganze Reihe weiterer Warnungen zu konkreten Fehlermeldungen konvertiert. Alle sonstigen Neuerungen und was im Detail dahinter steckt, könnt ihr entweder in Rooses Blogpost oder in den einzelnen RFC nachlesen.

Achtung: Bei Version 8 handelt es sich um ein Major Release. Das impliziert nicht abwärtskompatible Änderungen. Wer allerdings kontinuierlich auf die aktuellste Version aktualisiert hat, dürfte damit eher weniger Probleme haben – die meisten davon wurden wohl schon in vorherigen Versionen überholt.

Passend dazu: 

Das könnte dich auch interessieren

Bitte beachte unsere Community-Richtlinien

Wir freuen uns über kontroverse Diskussionen, die gerne auch mal hitzig geführt werden dürfen. Beleidigende, grob anstößige, rassistische und strafrechtlich relevante Äußerungen und Beiträge tolerieren wir nicht. Bitte achte darauf, dass du keine Texte veröffentlichst, für die du keine ausdrückliche Erlaubnis des Urhebers hast. Ebenfalls nicht erlaubt ist der Missbrauch der Webangebote unter t3n.de als Werbeplattform. Die Nennung von Produktnamen, Herstellern, Dienstleistern und Websites ist nur dann zulässig, wenn damit nicht vorrangig der Zweck der Werbung verfolgt wird. Wir behalten uns vor, Beiträge, die diese Regeln verletzen, zu löschen und Accounts zeitweilig oder auf Dauer zu sperren.

Trotz all dieser notwendigen Regeln: Diskutiere kontrovers, sage anderen deine Meinung, trage mit weiterführenden Informationen zum Wissensaustausch bei, aber bleibe dabei fair und respektiere die Meinung anderer. Wir wünschen Dir viel Spaß mit den Webangeboten von t3n und freuen uns auf spannende Beiträge.

Dein t3n-Team

Schreib den ersten Kommentar!

Melde dich mit deinem t3n Account an oder fülle die unteren Felder aus.

Bitte schalte deinen Adblocker für t3n.de aus!

Hallo und herzlich willkommen bei t3n!

Bitte schalte deinen Adblocker für t3n.de aus, um diesen Artikel zu lesen.

Wir sind ein unabhängiger Publisher mit einem Team von mehr als 75 fantastischen Menschen, aber ohne riesigen Konzern im Rücken. Banner und ähnliche Werbemittel sind für unsere Finanzierung sehr wichtig.

Schon jetzt und im Namen der gesamten t3n-Crew: vielen Dank für deine Unterstützung! 🙌

Digitales High Five
Holger Schellkopf (Chefredakteur t3n)

Anleitung zur Deaktivierung

Artikel merken

Bitte melde dich an, um diesen Artikel in deiner persönlichen Merkliste auf t3n zu speichern.

Jetzt registrieren und merken

Du hast schon einen t3n-Account? Hier anmelden

oder