PHP-Entwickler Brent Roose gab auf seinem Blog einige Schwerpunkte der kommenden Major Version von PHP bekannt. Aktuell werde an PHP 8 intensiv gearbeitet und Roose will künftig regelmäßig über den aktuellen Entwicklungsstand berichten.
JIT-Compiler
Mit PHP 8 erscheint ein Just-In-Time-Compiler – kurz JIT-Compiler – an welchem bereits seit mehreren Jahren gearbeitet wird. Dieser soll die Leistung von PHP nochmals deutlich verbessern. Während Programmiersprachen wie C, Java oder Rust das kompilieren des Codes voraussetzen, wird PHP Zeile für Zeile während der Laufzeit interpretiert. Dieses Vorgehen kostet bei der Ausführung wichtige Zeit, da der Code nicht bereits vorab als Maschinencode vorliegt. Künftig wird der JIT-Compiler den ausgeführten Code während der Laufzeit überwachen, um häufig ausgeführte Passagen bereits vorab kompilieren zu können und somit die Ausführung des Codes zu beschleunigen.
Union Types
Union Types ist die Bezeichnung eines Verbunds mehrerer Typen, welche jeweils in einer Methode verwendet werden können. So akzeptiert PHP 8 beispielsweise eine Union aus Int und Float:
public function foo(Foo|Bar $input): int|float;
static
Künftig unterstützt PHP auch Static Return Types. Neben parent und self kann somit ebenfalls static als Rückgabewert genutzt werden.
Syntax
PHP 8 soll weitere Verbesserungen der Variablensytax bieten. Die Konstante ::class liefert Klassennamen in Form von Strings. Irrtümlicherweise glauben viele, dass $object:class den Namen eines Objekts liefert, doch dieser Befehl funktioniert nicht. Bisher musste für diesen Zweck der Befehl get_class($object) genutzt werden. In PHP 8 wird auch der folgende Befehl den Namen eines Objekts liefern:
$foo = new Foo();
var_dump($foo::class);
Sonstiges
Neu ist die Funktion fdiv, welche das Teilen durch 0 ermöglicht, was anstatt einer Fehlermeldung INF, -INF oder NAN als Rückgabewert liefern wird. Außerdem werden einige Warnungen künftig zu Fehlermeldungen umgewandelt.
Für einen tieferen Einblick in die Neuerungen von PHP 8 können interessierte einen Blick auf den Blogpost von Roose werfen.