PHP 7.3 im Anmarsch: Das gibt’s Neues

Philipp Zeder
Autor:

Philipp Zeder

Kategorie:

in

Entwicklung & Performance

Veröffentlicht am 30. Nov. 2018

Aktualisiert am 7. März 2024

PHP 7.3 steht in den Startlöchern. Die neueste PHP-Version ist gespickt mit Funktionalitäten, die das Webentwickler-Leben einfacher machen. Wir zeigen, welche Neuerungen und Änderungen PHP 7.3 mitbringt.

PHP 7.3 im Anmarsch: Das gibt's Neues

Gelockerte Syntax für Heredoc und Nowdoc

Heredoc und Nowdoc sind Möglichkeiten um Strings zu definieren. Die Syntax-Vorgaben für die beiden Methoden sind mit PHP 7.3 weniger streng. Neben Heredoc und Nowdoc dürften einfache und doppelte Anführungszeichen die bei PHP-Entwicklern bekanntesten Methoden sein, um Strings zu definieren.

Heredoc funktionieren wie doppelte Anführungszeichen. Im Text vorkommende Variablen werden also vom PHP-Interpreter in den entsprechenden Wert umgewandelt. Ausserdem müssen Anführungszeichen nicht maskiert werden. Was Heredoc und doppelte Anführungszeichen verbindet, verbindet Nowdoc und einfache Anführungszeichen. In Nowdoc müssen Anführungszeichen maskiert werden. Ausserdem werden Variablen 1:1 ausgegeben und nicht deren Wert.

Bis PHP 7.2 mussten die abschliessenden Markierungen für Heredoc und Nowdoc auf einer neuen Zeile zu Beginn erscheinen. Ab PHP 7.3 dürfen diese Markierungen nun auch eingerückt sein:

$foo = <<<HALLO
  HALLO_WELT <-- Beendet das Heredoc-Literal nicht.
  HALLOWELT  <-- Beendet das Heredoc-Literal ebenfalls nicht. 
  HALLO WELT <-- Beendet das Heredoc-Literal neu mit PHP 7.3
HALLO;

Während in früheren Versionen der Heredoc mit HALLO; auf der letzten Zeile geendet hätte, wird HALLO auf Zeile 4 ab PHP 7.3 nun als Ende des Literals interpretiert.

Abschliessendes Komma in Funktions- und Methodenaufrufen

Aufrufe von Funktionen und Methoden dürfen nun ein abschliessendes Komma enthalten. So ist neu folgender Code valide:

// regular functions.
foo('bar', 'baz',); // Neu ist in Funktions- und Methodenaufrufen ein abschliessendes Komma erlaubt.

Das macht den Umgang mit Funktionen und Methoden in vielen Fällen einfacher, weil nicht darauf geachtet werden muss, ob ein abschliessendes Komma vorhanden sein darf.

In der Deklaration von Funktionen und Methoden ist ein abschliessendes Komma jedoch weiterhin nicht erlaubt:

function foo($bar, $baz, ) { // Ein abschliessendes Komma in Deklarationen ist weiterhin nicht erlaubt
}

Referenzzuweisung in list()

Bisher waren Referenzzuweisungen in der Funktion list() nicht möglich. Ab PHP 7.3 ist nun aber folgender Code valide:

$array = [1, 2];
list($a, &$b) = $array;

Damit wird der Variable $b der zweite Wert des Arrays $array zugewiesen. Mit der neuen Funktion ist nun das gleichzeitige Zuweisen mehrerer Referenzwerte zu mehreren Variablen möglich.

Arrays einfacher auslesen

Arrays sind mächtigen Datenkonstrukte. Bisher fehlte allerdings ein Bordmittel, den ersten oder letzten Schlüssel eines Arrays auszugeben. Mit den neuen Funktionen array_key_first() und array_key_last() sind diese beiden Operationen nun von Haus aus möglich. Im entsprechenden RFC wurden ausserdem die beiden neuen Funktionen array_value_first() und array_value_last() vorgeschlagen, die das Auslesen des ersten und letzten Werts eines Arrays vereinfacht hätten. In der Entscheidungsabstimmung sprach sich jedoch eine Mehrheit gegen eine Einführung aus.

Objekt zählbar?

Mit PHP 7.2 wurde bereits eine Warnung eingeführt, wenn count() auf ein Objekt angewendet wird, das die Funktion nicht unterstützt. Bislang musste man sich eine entsprechende Prüfungsfunktion allerdings selbst bauen:

if (is_array($foo) || $foo instanceof Countable) {
    return count($foo);
}

Mit PHP 7.3 und der neu eingeführten Funktion is_countable() kann man sich dieses Konstrukt sparen. Die Funktion liefert zurück, ob ein Objekt zählbar ist.

Sinnvolle Fehlermeldungen für JSON

Mit json_encode() und json_decode() kann PHP seit Version 5.2 mit Daten im verbreiteten JSON-Format umgehen. Bislang wurde bei einem Fehler der Wert null zurückgeliefert. Der Haken an der Sache: null kann in JSON ein gewünschter Wert sein. Ob es sich bei null also um einen Fehler oder doch den in der Tat zugewiesenen Wert handelt, war bisher nur schwer herauszufinden. Mit der neu geschaffenen Option JSON_THROW_ON_ERROR lässt sich nun das Verhalten der beiden JSON-Funktionen im Fehlerfall verändern, um eine klarere Rückmeldung zur Fehlerquelle zu erhalten.

Veraltete Funktionalitäten in PHP 7.3

Mit einer neuen PHP-Version werden nicht nur neue Funktionalitäten eingeführt, sondern auch alte Zöpfe abgeschnitten. Zu jeder guten Software-Version gehört schliesslich auch, dass Altlasten aufgeräumt werden. Als veraltet markierte Funktionalitäten werden spätestens mit Version 8.0 aus dem PHP-Code verschwinden.

Mit der Grafikerweiterung GD und deren Funktion image2wbmp() können Bilder im Wireless-Bitmap-Format (WBMP) erzeugt werden. Die Schwester-Funktion imagewbmp() verhält sich seit PHP 5.0 praktisch identisch, weshalb image2wbmp() spätestens mit PHP 8.0 verschwinden wird. Sollten Sie die Funktion in Ihrem Code im Einsatz haben, können Sie die entsprechenden Stellen einfach mit imagewbmp() ersetzen.

Bisher war es möglich, Konstanten zu definieren und sie dabei «case-insensitive» zu machen. Für den Aufruf der Konstante musste damit nicht zwischen Gross- und Kleinschreibung unterschieden werden. Mit PHP 7.3 liefert sowohl die Definition als auch der Aufruf einer Konstante eine Deprecation-Warnung, wenn die Option «case-insesitive» für die Konstante gesetzt ist. Nach gängiger Konvention werden Konstanten sowieso immer in Grossbuchstaben geschrieben.

PHP 7.3 jetzt schon testen

Nebst den oben erwähnten Neuerungen und Änderungen bietet PHP 7.3 weitere kleinere Verbesserungen. Ausführliche Informationen zum Hintergrund aller Änderungen finden Sie in den offiziellen sogenannten «Requests for Comments», kurz RFCs.

PHP 7.3.0, also die erste Version die auch für produktive Applikationen geeignet ist, soll am 06. Dezember 2018 erscheinen. Die Vorabversion, den sogenannten «Release Candidate», können Sie bei uns jetzt schon testen. Wählen Sie dazu PHP 7.3 einfach in Ihrem my.cyon-Konto für die gewünschten Verzeichnisse aus: Wie kann ich die PHP-Version eines Verzeichnisses ändern?

Beteilige dich an der Diskussion

7 Kommentare

Peter
Peter 5. Jan. 2019 09:49

Hallo Philipp

Ich habe PHP 7.3 mit Doctrine/Orm getestet.

Damit Doctrine 2 läuft benötigt man die Version 2.6.3

Weiter habe ich mit Hilfe von euren Support-Team festgestellt, dass ihr anscheinend noch nicht ganz soweit seit. PHP 7.3 läuft noch nicht ganz richtig auf euren Servern. Um anderen unnötigen Aufwand zu ersparen hier meine festgestellten Fehler:
– MySql Datenbank-Connection mittels “host” => “localhost” funktioniert nicht. Mittels 127.0.0.1 geht es.
– der Befehl mkdir(‘unterverzeichns/test/test/’, 0775, true) wird mit einem Permission denied nicht durchgeführt.
Gem. Support seit ihr daran ein Update durchzuführen.
Dies zur Info für alle welche 7.3 ebenfalls testen wollen.
Gruss Peter

Philipp Zeder
Philipp Zeder cyon
7. Jan. 2019 11:04

Vielen Dank für Deinen Kommentar, Peter. Das ist korrekt, diese Ungereimtheiten im Zusammenspiel mit PHP 7.3 werden mit der neuen Version unseres Webservers LiteSpeed behoben sein. Wir sind gerade daran, die letzten Tests abzuschliessen und werden das Update voraussichtlich in den kommenden Tagen durchführen können.

Michael
Michael 14. Dez. 2018 20:04

Im Bezug auf WordPress ist es momentan einfach noch so, dass viele Themes leider noch nicht mit PHP 7.3 umgehen können. Aus diesem Grund ist es vermutlich jetzt noch zu früh umzustellen, bis sich die Kompatibilität verbessert hat.

Manu
Manu 4. Dez. 2018 10:27

Unter “Gelockerte Syntax für Heredoc und Nowdoc” steht einmal “Heredoc”, wo “Nowdoc” stehen sollte, und einmal “7.3” statt “7.2”.

Philipp Zeder
Philipp Zeder cyon
4. Dez. 2018 17:54

Merci für den Hinweis, Manu. Ich habe die beiden Stellen korrigiert.

Pascal Wacker
Pascal Wacker 4. Dez. 2018 08:31

Gibt es bereits erste benchmarks wie sich der RC von PHP 7.3 performance mässig im vergleich zu PHP 7.2 schlägt

Philipp Zeder
Philipp Zeder cyon
4. Dez. 2018 17:48

Wir konnten in ersten, nicht-repräsentativen Versuchen bis zu einer Halbierung der Ladezeiten gegenüber PHP 7.2 messen, müssen diese Ergebnisse aber noch verifizieren. Die Ergebnisse bei den Kollegen von Phoronix sehen ebenfalls vielversprechend aus: https://www.phoronix.com/scan.php?page=news_item&px=PHP-7.3-Performance-Benchmarks