PHP 7.1 bekommt Nullable Types und den Pseudotyp iterable

Außerdem bietet die Programmiersprache neuerdings Funktionen, die keine Rückgabewerte haben dürfen. Weitere Neuerungen betreffen Klassenkonstanten und Listen.

 –  180 Kommentare
PHP 7.1 erlaubt leere Rückgabewerte
Anzeige

Nach einer viermonatigen Betaphase ist nun planmäßig das fertige Release von PHP 7.1 erschienen. Die Neuerungen sind weitgehend rückwärtskompatibel und vor allem Ergänzungen, die bereits in anderen Programmiersprachen existieren. So erweitert PHP die Zugriffskontrolle für Klassenkonstanten. Diese bleiben standardmäßig public und damit auch außerhalb der jeweiligen Klasse sichtbar, lassen sich aber neuerdings alternativ als private oder protected definieren, sodass sie nur innerhalb der Klasse selbst beziehungsweise zusätzlich für Kindklassen verfügbar sind.

PHP wird mit Version 7.1 flexibler bei der Handhabung leerer Rückgabewerten. So erlaubt sie erstmals, den Rückgabewert einer Funktion als void zu definieren. Zwar ist die Angabe des Werts ohnehin optional, sodass grundsätzlich die Rückgabe beliebiger Typen erlaubt ist. Bisher gab es aber keine Möglichkeit, explizit zu definieren, dass eine Funktion keinen Wert returniert. Die Hauptmotivation liegt darin, dass bereits der Compiler einen Fehler auswirft, wenn eine als void deklarierte Funktion doch einen Wert zurückgeben will.

Anzeige

Die Rückkehr aus einer entsprechenden Methode ist sowohl explizit mit einem return; (ohne Wert) als auch implizit durch das Durchlaufen des Funktionskörpers möglich. Da es das Schlüsselwort void bisher in PHP nicht gab, könnte es in einzelnen Fällen zu Konflikten kommen, wenn Entwickler es als Klassennamen verwendet haben. In PHP 7.1 wird void nicht zu einem grundsätzlich reservierten Wort, ist aber ab sofort als Klassen- oder Interfacename verboten.

Ebenfalls neu sind sogenannte Nullable Types. Dabei handelt es sich um Typen, die entweder einen passenden Wert oder null enthalten können. Die Deklaration erfolgt durch das Voranstellen eines Fragezeichens:

function rechne(?string $test): ?int { 
return 123; // erlaubt
return null; // erlaubt
if ($test) { // testet den Parameter (nicht null)
return $test; // Fehler
}
}

Kindklassen können beim Subtyping für Rückgabewerte Nullable Types durch den festen Typen ersetzen (im Beispiel also int ohne Fragezeichen). Der umgekehrte Weg ist jedoch nicht erlaubt.

Neu ist zudem der Pseudotyp iterable, der für einen beliebigen Typ steht, auf die ein sequenzieller Zugriff beispielsweise mit foreach möglich ist. iterable ist sowohl als Parameter als auch als Rückgabewert erlaubt. Generatoren funktionieren ebenso:

function gen(): iterable {
yield 1;
yield 2;
...
}

Weitere Details wie die Neuerungen für Listen und die Möglichkeit, mehrere Exceptions in einem catch-Block zu bearbeiten, finden sich in der Ankündigung. Die vollständigen Neuerungen und Bugfixes listet das Change Log auf. PHP 7.1 steht auf der Download-Seite zum Herunterladen bereit. (rme)

Anzeige