Programmiersprache: PHP 8.1 führt Enumerationen ein

Zu den Neuerungen der aktuellen PHP-Version zählen unter anderem Enums, Fibers und Leistungen zur Steigerung der Performance.

Lesezeit: 4 Min.
In Pocket speichern
vorlesen Druckansicht Kommentare lesen 85 Beiträge

(Bild: Sashkin/Shutterstock.com)

Von
  • Madeleine Domogalla

Für die Programmiersprache PHP liegt Version 8.1 vor. Das Update bringt zahlreiche Neuerungen, wie Enumerationen, Fibers und Performance-Verbesserungen.

Das Release führt Enumerationen (kurz: Enum) ein. Dabei handelt es sich analog zu anderen Sprachen wie Java oder C++ um einen Aufzählungstyp, der vorgegebene Werte erlaubt. Enums weisen in PHP Ähnlichkeiten zu Klassen auf und teilen sich die gleichen Namensräume wie Klassen, Interfaces und Traits. Das wiederum macht sie auf die gleiche Weise automatisch ladbar (autoloadable). Zur Veranschaulichung dient ein Beispiel aus dem Request for Comments (RFC) auf wiki.php.net:

enum Suit {
	case Hearts;
	case Diamonds;
	case Clubs;
	case Spades;
}

Das Beispiel erzeugt einen neuen Aufzählungstyp namens Suit, der die folgenden vier Werte aufnimmt: Suit::Hearts, Suit::Diamonds, Suit::Clubs und Suit::Spades. Diesen Werten lassen sich Variablen zuweisen. Entwickler können Aufzählungstypen mit dem Schlüsselwort Enum deklarieren, dem der Name des Types folgt. Ein Enum kann sowohl string als auch int als Grundlage nehmen. Darüber hinaus können sie auch eine Klasse erweitern und/oder Schnittstellen implementieren.

Der Vorteil von Enums ist, dass sie eine Sammlung von konstanten Werten darstellen, aber vor allem können diese Werte typisiert werden. Im Gegensatz zur internen Verwendung spezieller Zeichenketten oder Zahlen (z.B. Magic Numbers) zum Speichern und Arbeiten mit Parametern, sollen Enums den Anwendungscode lesbarer machen und unerwartete Anwendungszustände vermeiden. Mit einer Mehrheit von 44 zu 7 Stimmen wurde in den PHP Internals für das RFC gestimmt, sodass Enums nun Teil von PHP 8.1 sind.

Bisher war PHP lediglich für das Schreiben von synchronem Code vorgesehen. Dabei wird das Ausführen von Funktionen angehalten, bis ein Ergebnis verfügbar ist, das von einer Funktion zurückgegeben wird. Seit einiger Zeit gab es laut dem RFC Versuche, auch asynchronen Code zu schreiben, um gleichzeitige Eingabe-Ausgabe-Operationen zu ermöglichen. Asynchrone Funktionen erlauben einen Callback oder geben einen Platzhalter für einen zukünftigen Wert zurück, um den Code an der Stelle erst dann fortzusetzen, wenn ein Ergebnis vorliegt. Somit wird der Code weiterhin ausgeführt, ohne auf ein Ergebnis zu warten – Beispiele für diese Projekte sind amphp, ReactPHP und Guzzle.

Das Einführen von Fibers soll die Unterscheidung von asynchronen und synchronen Funktionen aufheben. Sie ermöglichen offenbar die Erstellung von unterbrechbaren Full-Stack-Funktionen, die zur Implementierung von kooperativem Multitasking in PHP verwendet werden können – auch bekannt als Koroutinen oder sogenannte Green-Threads. Fibers bringen den gesamten Stapel an Ausführungen zum Stehen, sodass der Caller der Funktion die Art und Weise des Aufrufens der Funktion nicht ändern muss.

Das Ausführen lässt sich an einer beliebigen Stelle eines Stapels mit Fiber::suspend() unterbrechen. Das RFC wurde mit 50 zu 14 Stimmen beschlossen.

PHP 8.1 bringt neben Enums und Fibers Neuerungen für eine bessere Performance. Release Manager PHP-Core-Entwickler Dmitry Stogov hat einige Verbesserungen zur Erweiterung opcache hinzugefügt, die er "inheritance cache" nennt. Mit dieser Funktion lassen sich Verknüpfungen zwischen Klassen zwischenspeichern, ähnlich wie in PHP 7.4, wo verknüpfte Klassen vorgeladen werden können. Er berichtet auf GitHub von einer Steigerung der Performance zwischen 5 und 8 Prozent.

Die Liste der Neuerungen von PHP 8.1 ist lang. Eine Aufzählung aller Änderungen findet sich im Beitrag auf php.net. Kurz vor dem Release hatte sich die PHP Foundation gegründet, um die Weiterentwicklung der Sprache nach dem Rückzug von Nikita Popov zu sichern.

(mdo)