PHP 8.2 – Was ist neu?

Die neue Version 8.2 von PHP ist da und bringt einige interessante Neuerungen mit sich. In diesem Artikel stellen wir Ihnen die wichtigsten Neuerungen vor.

PHP-Version 8.2 – Einführung

PHP 8.2 ist die neueste Version der beliebten Skriptsprache PHP. Die neue Version enthält viele Verbesserungen und Neuerungen, die das Arbeiten mit PHP noch einfacher und effizienter machen. Einige der wichtigsten Neuerungen in PHP 8.2 sind:

– Die Unterstützung für das neue Dateiformat „XMLHttpRequest 2“
– Eine verbesserte performance von AJAX-Anfragen
– Die Möglichkeit, mehrere unabhängige Konfigurationsdateien zu verwenden
– Ein neues Verfahren zur Berechnung der Laufzeit einer Anwendung

Diese und viele weitere Neuerungen machen PHP 8.2 zu einer sehr interessanten Sprache für Webentwickler.

Constants in Traits

In PHP 8.2 wurden Konstanten in Traits eingeführt. Dies ermöglicht es, konstante Werte aus einem Trait direkt in einer Klasse zu verwenden, in der das Trait eingebunden ist. Dies ist nützlich, um beispielsweise den Namen einer Klasse oder eines Interfaces in einem Trait zu spezifizieren, ohne dass dieser Name hardgecodet werden muss.

Make the iterator_*() family accept all iterables

Die neue Version 8.2 von PHP bringt einige erwartete Änderungen mit sich. Eine der wichtigsten ist, dass die iterator_*()-Familie jetzt alle iterierbaren Objekte akzeptiert. Dies bedeutet, dass Sie nun auch foreach über gängige Datenstrukturen wie Arrays und Objekte verwenden können.

Bisher mussten Sie für jede dieser Strukturen einen eigenen Iterator schreiben. Dies war notwendig, da die Standard-PHP-Iteratoren nur mit den internen Array-Datenstrukturen kompatibel waren. Mit der neuen Version 8.2 können Sie jetzt auch foreach über beliebige iterierbare Objekte verwenden – unabhängig davon, ob es sich um einen Array oder ein anderes Objekt handelt.

Random Extension 5.x

Zufällige Erweiterung 5.x

Die zufällige Erweiterung ist eine kleine Erweiterung, die es dem Zufallsgenerator ermöglicht, zufällige Zahlen zu erzeugen. Diese Erweiterung ist besonders nützlich für Entwickler, die eine Anwendung erstellen, in der zufällige Zahlen benötigt werden. Die Erweiterung bietet ein einfaches API, mit dem Entwickler ihre Anwendungen schnell und einfach integrieren können.

Deprecate and remove utf8_decode() and utf8_encode()

Die Funktionen utf8_decode() und utf8_encode() werden in PHP 8.2 deprecated und anschließend entfernt. Diese Funktionen sind eine holdout aus älteren Versionen von PHP, bevor die Unterstützung für Unicode in den Kern eingebaut wurde.

Seit der Einführung von Unicode-Unterstützung in PHP 5.0 im Jahr 2004 gibt es keinen Grund mehr, diese Funktionen zu verwenden. Die meisten modernen Anwendungen sollten ohnehin bereits auf Unicode setzen. Falls Ihre Anwendung dies noch nicht tut, sollten Sie dies umgehend nachholen.

Random Extension Improvement

Die neue PHP-Version 8.2 enthält eine Reihe von Verbesserungen für zufällige Erweiterungen. Dazu gehören unter anderem eine bessere Unterstützung für multithreaded Anwendungen, eine erweiterte Funktionalität für die Zufallszahlengenerierung und einige Optimierungen der internen Verarbeitung.

Remove support for libmysql from mysqli

Die Unterstützung für libmysql wird in mysqli nicht mehr angeboten. Dies bedeutet, dass die Funktionalität, die libmysql bereitstellt, nicht mehr verfügbar ist.

Fetch properties of enums in const expressions

In PHP 8.2 wurde ein neues Feature namens „Fetching Enum Properties in Const Expressions“ eingeführt. Dies ermöglicht es Entwicklern, Eigenschaften von Aufzählungstypen (Enums) in Konstanten-Ausdrücken abzurufen. Bisher mussten Enums immer als Objekte instanziiert werden, um auf ihre Eigenschaften zugreifen zu können. Durch die Verwendung dieses neuen Features können Entwickler jetzt ganz einfach auf die Eigenschaften von Enums zugreifen, ohne sie zuerst instanzieren zu müssen.

Um die Eigenschaften eines Enum-Typs in einem Konstanten-Ausdruck abzurufen, muss man lediglich den Namen des Typs in geschweiften Klammern schreiben, gefolgt von einem Punkt und dem Namen der gewünschten Eigenschaft:

Example:

namespace MyProjectEnums;

class Action {
const VIEW

Deprecate ${} string interpolation

Die neue PHP-Version 8.2 bringt einige interessante Neuerungen mit sich. Eine davon ist die Deprecation von ${} für String-Interpolation. DiesesFeature wurde bereits in der Version 7.4 eingeführt und soll nunmehr in der Version 8.2 endgültig entfernt werden.

Disjunctive Normal Form Types

In PHP 8.2 gibt es zwei neue Disjunktive Normal Formtypen:

– Die erste ist die sogenannte „Konjunktive Normalform“. Dies bedeutet, dass eine Bedingung mit mehreren alternativen Ergebnissen ausgewertet wird. Zum Beispiel könnte eine Bedingung wie „x > 5 OR x < 3“ in Konjunktiver Normalform ausgewertet werden.

– Die zweite ist die sogenannte „Disjunktive Normalform“. Dies bedeutet, dass eine Bedingung mit mehreren disjunkten (unabhängigen) Ergebnissen ausgewertet wird. Zum Beispiel könnte eine Bedingung wie „x > 5 AND y < 3“ in Disjunktiver Normalform ausgewertet werden.

Redacting parameters in back traces

Bei der Suche nach einem Fehler in einer PHP-Anwendung kann es hilfreich sein, die ausgeführten Befehle oder die zurückverfolgten Parameter anzuzeigen. Zur Verbesserung der Privatsphäre und Sicherheit von Anwendungen wird in PHP 8.2 die Möglichkeit eingeführt, diese Informationen zu unkenntlich zu machen.

Wenn Sie eine backtrace anzeigen lassen, sehen Sie standardmäßig keine information über die Variablenwerte mehr, sondern nur noch den Typ der Variable:

$ php -r ‚debug_backtrace();‘
#0 {main}() /tmp/a.php:0
#1 debug_backtrace ( ) /tmp/a.php:4

Add true type

In der neuen PHP-Version 8.2 gibt es einige interessante Neuerungen, darunter eine bessere Unterstützung für TrueType-Schriften. Dies bedeutet, dass PHP nun in der Lage ist, TrueType-Schriften zu verarbeiten und diese in Webseiten und Anwendungen anzuzeigen.

Deprecate dynamic properties

Seit der Veröffentlichung von PHP 8.0 im Dezember 2020 wurden mehrere neue Funktionen und Verbesserungen in der Sprache eingeführt. Eine davon ist die Deprecation von dynamischen Attributen.

Bisher konnten Objekte und Klassen beliebige Attribute definieren, ohne vorher deren Namen anzugeben. Dies war jedoch oft problematisch, da es schwierig war, herauszufinden, welche Attribute ein Objekt oder eine Klasse tatsächlich besaß.

In PHP 8.2 wird diese Funktion nun offiziell deprecated und soll in zukünftigen Versionen entfernt werden. Stattdessen wird empfohlen, die Attributnamen immer explizit anzugeben, um Probleme mit der Kompatibilität zu vermeiden.

MySQLi Execute Query

Die neue PHP-Version 8.2 bringt eine Reihe von Neuerungen mit sich, unter anderem auch für die MySQLi-Erweiterung. So können ab sofort Queries mit dem neuen mysql_execute() Befehl ausgeführt werden. Dieser Befehl nimmt ein Objekt vom Typ mysqli_stmt als Parameter und führt die angegebene Query aus. Zuvor mussten Queries immer mit dem mysql_query() Befehl ausgeführt werden, was jedoch einige Nachteile mit sich brachte, insbesondere bei der Performance. Mit dem neuen Befehl können nun mehrere Queries gleichzeitig ausgeführt werden, was die Geschwindigkeit und Effizienz erheblich steigert.

Expand deprecation notice scope for partially supported callables

In PHP 8.2 wurde die Deprecation Notice für teilweise unterstützte Aufrufe erweitert. Dies betrifft Aufrufe, die nicht vollständig unterstützt werden, z.B. fehlende Parameter oder Rückgabetypen. Um diese Erweiterung zu veranschaulichen, sehen wir uns ein konkretes Beispiel an:

Angenommen, Sie haben eine Methode mit dem Namen doSomething(), die in PHP 8.1 noch funktioniert hat, aber in PHP 8.2 bereits deprecated ist. In diesem Fall erhalten Sie beim Aufruf der Methode eine Deprecation Notice:

DoSomething() ist deprecated seit PHP 8.2 und wird in zukünftigen Versionen nicht mehr unterstützt!

Wenn Sie also doSomething() in Ihrem Code aufrufen, sollten Sie sich darauf vorbereiten, dass dies in zukünftigen Versionen von PHP nicht mehr möglich sein wird und entsprechend anpassen.

Readonly classes

In PHP 8.2 wurden einige Änderungen an der syntax vorgenommen, um sie konsistenter mit anderen Sprachen zu gestalten. Zum Beispiel wurde die final-Keyword hinzugefügt, um Klassen als unveränderlich (readonly) deklarieren zu können. Dies ist nützlich, wenn Sie sicherstellen möchten, dass bestimmte Klassen nicht von abgeleiteten Klassen geändert werden.

Deprecate partially supported callables

Im Zuge der Veröffentlichung von PHP 8.2 wird eine Reihe von veralteten und teilweise unterstützten Aufrufen entfernt. Dazu gehören die folgenden Funktionen:

– array_key_exists()
– trigger_error()
– set_error_handler()
– restore_error_handler()
– set_exception_handler()
– restore_exception_handler()
– getimagesize()
– imagecreatefromgif()
– imagegif()
– imageloadfont()

Allow null and false as stand-alone types

In PHP 8.2 wurden die Typen Null und False als eigenständige Typen eingeführt. Dies bedeutet, dass sie nicht mehr zu den Skalartypen gehören und deshalb auch nicht mehr in andere Typen konvertiert werden können.

Bisher mussten sich Entwickler bei der Verwendung von Null und False immer unsicher sein, welchen Typ der Wert tatsächlich hatte. Das kann nun nicht mehr passieren, da beide Werte explizit als ihr jeweiliger Typ deklariert werden müssen.

Ein weiterer Vorteil dieser Änderung ist, dass nun auch Folgeoperationen mit Null und False möglich sind, ohne dass zuvor eine Konvertierung in einen anderen Typ erfolgen muss.

Locale-independent case conversion

Mit der neuen Version von PHP 8.2 wurde ein neues Schalter case_folding in die str_ireplace-Funktion integriert. Dieser ermöglicht es, bei der Suche und Ersetzung in Zeichenketten unabhängig vom lokalen Gebietsschema zu arbeiten. Bisher mussten bei solchen Operationen immer die jeweiligen Lokalisierungseinstellungen berücksichtigt werden, was zu unerwarteten Ergebnissen führen konnte. Mit dem neuen Schalter ist es nun möglich, dieses Verhalten global zu deaktivieren und so konsistentere Ergebnisse zu erzielen.

Lohnt sich der Umstieg von PHP 8.1 auf PHP 8.2?

Die neue PHP-Version 8.2 ist da und es gibt einige spannende Neuerungen. Wir haben uns die Umstellung auf die neue Version angesehen und festgestellt, dass sich der Aufwand lohnt. Vor allem für Entwickler, die mit dem Framework Laravel arbeiten, bietet die neue Version einige Vorteile. Wenn Sie also noch nicht auf PHP 8.2 umgestellt haben, sollten Sie dies bald tun.

Fazit zu PHP 8.2

Nach mehr als einem Jahr in der Entwicklung ist die neue Version 8.2 von PHP endlich verfügbar. Die neue Version bringt einige interessante Neuerungen mit sich, die vor allem für Webentwickler interessant sein dürften. Zu den wichtigsten Neuerungen gehören unter anderem eine bessere Performance, verbesserte Sicherheit und zahlreiche kleinere Verbesserungen.

Alles in allem ist PHP 8.2 ein weiterer Schritt in die richtige Richtung und sollte bald auf allen Websites eingesetzt werden.