PHP 8.2: Was zu erwarten ist (Entwicklerhandbuch – Aktualisiert)

by Jason Cosper
PHP 8.2: Was zu erwarten ist (Entwicklerhandbuch – Aktualisiert) thumbnail

PHP 8.2 soll im November dieses Jahres erscheinen, wobei die aktuellste stabile Version PHP 8.1.5 ist. Obwohl es noch früh im Prozess ist, gab es eine gemischte Reaktion auf PHP 8.2 und die Kompatibilität von WordPress Core, Plugins und Themes.

Allerdings kann es hilfreich sein zu wissen, was Sie erwartet, damit Sie sich auf die neueste PHP-Version vorbereiten können. Indem Sie sich über die neuen Funktionen und diejenigen, die veraltet werden, informieren, können Sie verstehen, wie das Update die Entwicklung beeinflussen könnte. Dieses Wissen kann Ihnen auch helfen, sich auf die letztendliche Veröffentlichung vorzubereiten.

In diesem Beitrag fassen wir die neuesten PHP-Versionen zusammen. Dann werden wir die Neuheiten in PHP 8.2 behandeln und den Veröffentlichungsplan besprechen. Lass uns anfangen!

Übersicht der PHP-Versionen

PHP ist die primäre Programmiersprache von WordPress. Sie spielt eine entscheidende Rolle bei der Umwandlung von Daten aus Ihrer Datenbank in HTML-Webseiten für die Besucher Ihrer Website.

Als Website-Besitzer oder Entwickler sind Sie wahrscheinlich bereits mit der Wichtigkeit vertraut, Ihr WordPress-Core, Themes und Plugins aktuell zu halten. Es ist jedoch auch entscheidend, Ihre PHP-Version auf dem neuesten Stand zu halten.

Derzeit empfiehlt WordPress die Verwendung von mindestens PHP 7.4. Ältere Versionen von PHP erhalten keine aktive Unterstützung mehr für Sicherheitsupdates und Fehlerbehebungen. Daher kann ein Upgrade auf die neueste stabile Version von PHP zu einer besseren Website-Sicherheit, verbesserten Leistung und höheren Unterstützungsniveaus führen (wir betonen stabil, da ein Teil der über 60.000 Plugins von WordPress noch nicht vollständig mit PHP 8.0 kompatibel ist, daher ist es ratsam, diese Updates mit etwas Vorsicht zu behandeln).

PHP 7.4 führte typisierte Eigenschaften, einen numerischen Trenner mit Unterstrich und verschiedene Verbesserungen ein. Seitdem wurden einige weitere Iterationen von PHP veröffentlicht.

PHP 8.0, veröffentlicht im November 2020, brachte eine Handvoll wesentlicher Funktionen. Neben Syntax- und Leistungsverbesserungen umfasste die Veröffentlichung:

  • Benannte Parameter
  • Syntaxabgleich
  • Vereinigungstypen
  • Konstruktor-Eigenschaftsförderung
  • JIT (welches die Ausführung von PHP-Quellcode beeinflusst)

Ein Jahr später kam PHP 8.1, die neueste Hauptversion von PHP. Dieses Update enthält bedeutende Funktionen, wie zum Beispiel:

  • Schnittmengen-Typen
  • Schreibgeschützte Eigenschaften
  • Enums
  • Fasern
  • Niemals Rückgabetyp

Auf dem neuesten Stand der PHP-Versionen zu bleiben, kann die Leistung und Sicherheit Ihrer Website verbessern. Es ist jedoch wichtig zu wissen, welche Änderungen zu erwarten sind, bevor Sie ein Upgrade durchführen. Wenn Sie daran interessiert sind, den aktuellen Stand von PHP 8.2 zu testen, können Sie dies über GitHub tun.

Was ist neu in PHP 8.2

PHP 8.2 wird voraussichtlich Ende 2022 veröffentlicht. Hier ist der aktuelle Veröffentlichungsplan, mit allgemeiner Verfügbarkeit (GA) für den 24. November 2022 geplant:

  • 9. Juni: Alpha 1
  • 23. Juni: Alpha 2
  • 7. Juli: Alpha 3
  • 19. Juli: Feature-Freeze
  • 21. Juli: Beta 1
  • 4. August: Beta 2
  • 18. August: Beta 3
  • 1. September: Release-Kandidat 1
  • 15. September: Release-Kandidat 2
  • 29. September: Release-Kandidat 3
  • 13. Oktober: Release-Kandidat 4
  • 27. Oktober: Release-Kandidat 5
  • 10. November: Release-Kandidat 6
  • 24. November: GA

Laut der offiziellen Dokumentation auf der PHP-Website sollte es eine Handvoll neuer Funktionen und veralteter Funktionen geben. Werfen wir einen Blick auf einige davon!

Disjunktive Normalform (DNF) Typen

PHP 8.2 wird eine neue einführen Disjunktive Normalform (DNF) Typenfunktion. DNF ist eine standardisierte Methode zur Organisation von booleschen Ausdrücken — speziell in eine OR-verknüpfte Serie von ANDs. Wenn DNF auf Typdeklarationen angewendet wird, ermöglicht es eine standardisierte Methode, kombinierte Union- und Schnitttypen zu schreiben, die der Parser verarbeiten kann.

Neue mysqli_execute_query Funktion und mysqli::execute_query Methode

Parametrisierte MySQLi-Abfragen ausführen wird in PHP 8.2 einfacher sein, dank der neuen mysqli_execute_query($sql, $params) Funktion und mysqli::execute_query Methode.

Dies wird die Komplexität der Verwendung von parametrisierten Abfragen weiter verringern, was es Entwicklern dann erleichtert, sich von mysqli_query() sowie gefährlichem/risikoreichem Escaping von Benutzerwerten zu entfernen.

Eigenschaften von Aufzählungen in const Ausdrücken abrufen

Laut dem RFC, „Dieser RFC schlägt vor, die Verwendung von ->/?-> zu erlauben, um Eigenschaften von Enums in konstanten Ausdrücken abzurufen. Die Hauptmotivation für diese Änderung besteht darin, die Name- und Wert-Eigenschaften an Orten abrufen zu können, an denen Enum-Objekte nicht erlaubt sind, wie z.B. bei Array-Schlüsseln.“

Neue zufällige Erweiterung

PHP 8.2 führt eine neue PHP-Erweiterung namens random ein. Sie organisiert und konsolidiert vorhandene PHP-Funktionalitäten im Zusammenhang mit der Zufallszahlen-Generierung. Zudem führt sie eine Reihe von PHP-Klassenstrukturen und Ausnahmeklassen ein, um granulare Optionen für Zufallszahlengeneratoren und Ausnahmebehandlungen zu bieten.

Die zufällige Erweiterung ist mit PHP gebündelt, und es gibt keine Kompilierungs- oder Laufzeitkonfigurationsoption, um die random-Erweiterung zu deaktivieren. Die random-Erweiterung wird in PHP 8.2 und später immer verfügbar sein.

Neue curl_upkeep Funktion

PHP 8.2 fügt der Curl-Erweiterung eine neue Funktion hinzu, die curl_upkeep genannt wird. Die Funktion curl_upkeep ruft curl_easy_upkeep() in libcurl auf, das ist die zugrundeliegende C-Bibliothek, die die PHP Curl-Erweiterung verwendet.

Die curl_upkeep()-Funktion führt die Arbeiten durch, die eine Curl-Verbindung am Leben erhalten. Aber nicht jeder Verbindungstyp, den Curl integriert, unterstützt die Verbindungspflege. Derzeit unterstützen nur HTTP/2-Verbindungen dies.

Neue ini_parse_quantity Funktion

ini_parse_quantity ist eine neue Funktion, die in PHP 8.2 hinzugefügt wird. Sie parsiert jede von PHP INI-Werten erkannte Datengröße (wie 56K, 256M oder 1G) und gibt dann die Datengröße in Bytes zurück. Sie kann nützlich sein, wenn vorhandene oder bereitgestellte INI-Werte in einer PHP-Anwendung geparst werden. Sie erkennt jedoch keine IEC-Suffixe für Datengrößen wie MB, MiB oder GB und ist nicht geeignet, um Standard-Datengrößenwerte in Bytes umzuwandeln.

Neue memory_reset_peak_usage Funktion

PHP 8.2 wird eine neue Funktion enthalten, die memory_reset_peak_usage heißt. Sie wird den durch die Funktion memory_get_peak_usage zurückgegebenen Spitzenwertspeicherverbrauch zurücksetzen.

Diese Funktion wird bei Fällen hilfreich sein, die das mehrmalige Aufrufen einer Aktion und das Aufzeichnen des Spitzen-Speicherverbrauchs jeder Iteration beinhalten. Entwickler werden in der Lage sein, dieses neue Feature zu nutzen, um den Spitzen-Speicherverbrauch zu jedem beliebigen Zeitpunkt während der Lebensdauer der Anfrage zurückzusetzen.

Erhalten Sie Inhalte direkt in Ihren Posteingang

Abonnieren Sie jetzt, um alle neuesten Updates direkt in Ihren Posteingang zu erhalten.

Schreibgeschützte Klassen

In PHP 8.1 eingeführt, werden Readonly-Eigenschaften in PHP 8.2 erweitert, um syntaktischen Zucker hinzuzufügen, sodass alle Klasseneigenschaften auf einmal schreibgeschützt sind:

readonly class Post
{
public function __construct(
public string $title,
public Author $author,
public string $body,
public DateTime $publishedAt,
) {}
}

Dies wird verhindern, dass dynamische Eigenschaften zu Klassen hinzugefügt werden.

Null, True und False eigenständige Typen

In PHP 8.2 wird der Rückgabetyp von false als eigenständiger Typ verfügbar sein, anstatt streng als Unionstyp, wenn ein Fehler auftritt, was bereits möglich ist:

function alwaysFalse(): false
{
return false;
}

Das Gleiche gilt für den Null-Typ. Zum Beispiel, als eigenständiger Typ, im Gegensatz zu früher, wird NullPost::getAuthor() nur null zurückgeben können.

PHP 8.2 erlaubt auch true als eigenständigen Typ.

Dynamische Eigenschaften veralten lassen

Dynamische Eigenschaften werden in PHP 8.2 als veraltet markiert und führen in PHP 9.0 zu einer ErrorException. Diese Eigenschaften werden an einem Objekt festgelegt:

class Post
{
public string $title;
}

// …

$post->name = 'Name';

Dynamische Eigenschaften ermöglichen Flexibilität beim Erstellen von Klassen (z. B. Wertobjekten) ohne eine strikte Klassendeklaration. Ihre Abschaffung wird wahrscheinlich ein Problem für Entwickler darstellen, die auf dynamische Eigenschaften angewiesen sind, da sie mehr zu statischen Analysen gedrängt werden. Aus diesem Grund sind einige Entwickler besorgt über diese Änderung mit PHP 8.2.

Jedoch unterstützen Klassen, die __get und __set verwenden, nach wie vor dynamische Eigenschaften, ebenso wie Objekte von stdClass.

Alternativ können Entwickler das neue #[AllowDynamicProperties]Attribut, das im globalen Namensraum deklariert wird, für Klassen verwenden, um diese Eigenschaften zu nutzen:

#[AllowDynamicProperties]
class User() {}
$user = new User();
$user->foo = 'bar';

Obwohl es nicht empfohlen wird, besteht eine weitere Möglichkeit darin, die Warnungen vor Veraltungen zu deaktivieren.

Neu /n Modifikator

PHP 8.2 wird Unterstützung für den /n (no capture) Modifier in der preg_* Funktionsfamilie enthalten. Wenn verwendet, werden Gruppen mit() Meta-Zeichen nicht erfassen, abgesehen von benannten erfassten Gruppen. Im Wesentlichen ist das Ergebnis dasselbe, wie wenn jede Gruppe als nicht erfassend markiert wäre.

Der Grund für diese Änderung ist, dass der Modifikator komplexe reguläre Ausdrücke für mehrere Gruppen vereinfacht. Anstatt jede Gruppe als nicht erfassend zu kennzeichnen, können Entwickler alle Gruppen als nicht erfassend markieren. Dann können sie spezifische Gruppen auswählen und benennen, die erfassen müssen.

Parameter in Rückverfolgungen schwärzen

Viele Entwickler verwenden Dienste, die Stack-Traces und Produktionsfehler aus Codebasen verfolgen. Diese Dienste können Benutzer benachrichtigen, wenn etwas schief geht. Zum Beispiel ist das Verfolgen von Call-Stacks hilfreich beim Debuggen einer Anwendung.

Manchmal können jedoch Stack-Trace-Informationen sensible Daten enthalten, wie Benutzernamen und Passwörter. PHP 8.2 wird ein #[SensitiveParameter]-Attribut enthalten, das verhindert, dass diese Informationen in Stack-Trace-Informationen aufgenommen werden, wenn Probleme auftreten:

function test(
$foo,
#[SensitiveParameter] $bar,
$baz
) {
throw new Exception('Error');
}

test('foo', 'bar', 'baz');

PHP 8.2 wird die sensiblen Parameter verwenden, um private Informationen aus Stack-Traces zu schwärzen, was sie sicherer macht. Diese Parameter stellen sicher, dass die Daten nicht in Fehlerprotokollen landen. Beachten Sie, dass dieses Attribut nur für Parameter verfügbar sein wird.

${} String-Interpolation veralten lassen

Es gibt mehrere Möglichkeiten, Variablen mit PHP in Strings einzubetten. Jedoch wird PHP 8.2 zwei Methoden veralten lassen. Die erste ist die Verwendung von ${} in Strings:

"Hallo ${world}";

Die zweite Methode verwendet ${} (variable Variablen):

"Hallo ${(world)}";

Dies wird wahrscheinlich kein bedeutendes Problem für Entwickler sein, da die zwei beliebtesten Methoden der Zeichenketteninterpolation weiterhin funktionieren werden.

Veraltete teilweise unterstützte Aufrufbare

Ein weiterer veralteter Wechsel wird bei teilweise unterstützten Callables sein. Es gibt mehrere Möglichkeiten, ein Callable in PHP zu erstellen. Es kann entweder mit oder ohne Parameter mit der $callable()-Syntax, der user_call_func(/a_array), oder unter Verwendung einer Funktion mit einem Callback aufgerufen werden.

Die veralteten aufrufbaren Muster umfassen Folgendes:

$callable = "self::method";
$callable = "parent::method";
$callable = "static::method";
$callable = ["self", "method"];
$callable = ["parent", "method"];
$callable = ["static", "method"];
$callable = ["MyClass", "MyParentClass::myMethod"];
$callable = [new MyClass(), "MyOtherClass::myMethod"];

Ab PHP 8.2 führt der Aufruf einer der oben genannten Funktionen zu folgender Veraltungsbenachrichtigung:

class Test {
public static function myMethod(): void {
echo "Called";
}
public static function call(): void {
$callable = 'self::myMethod';
call_user_func($callable);
}
}
$callable = Test::call();
// "Called";

Allerdings führt das Übergeben dieser Aufrufbaren an die is_callable Funktion oder die Verwendung mit den aufrufbaren Parametertypen nicht zur Generierung der Abschaffungsnachricht. Um die Abschaffungsbenachrichtigung zu vermeiden, können Entwickler stattdessen die Schlüsselwörter parent, self und static in aufrufbarem Code in ihre jeweiligen Klassennamen mit der::class Magie-Methode konvertieren.

Ein Teil des Grundes für die Änderung besteht darin, Aufrufbare für typisierte Eigenschaften verwenden zu können. Es macht sie weniger kontextabhängig.

MySQLi kann nicht mehr mit libmysql kompiliert werden

In der Vergangenheit hat PHP zwei Bibliotheken für die Verbindung mit MySQL-Datenbanken unterstützt: mysqlnd und libmysql. Ab PHP 5.4 ist die erstere die Standardbibliothek geworden. Es war jedoch möglich, MySQLi über Erweiterungen zu kompilieren.

Ab PHP 8.2 wird das Kompilieren einer MySQLi-Erweiterung mit libmysql nicht mehr unterstützt. Ein Versuch dies zu tun, wird zu einem Konfigurationsfehler führen:

./configure --with-mysqli=FOO

Das Verlinken von mysqli gegen externe Bibliotheken wird nicht mehr unterstützt

Dies wird wahrscheinlich keine signifikanten Fehler für Entwickler verursachen. Die zwei größten Merkmale, die von libmysql unterstützt werden, die jedoch bei mysqlnd nicht verfügbar sind, sind die Unterstützung für automatisches Wiederverbinden und Authentifizierung über LDAP und SASL.

Aktualisieren Sie Ihre WordPress PHP-Version

Als Entwickler ist es unerlässlich, Ihren Code gegen die kommenden Versionen von PHP zu testen. In diesem Fall sollten Entwickler so bald wie möglich beginnen, ihren Code gegen PHP 8.2 zu testen, um sicherzustellen, dass Ihr Code die Websites der Benutzer nicht beschädigt, wenn sie aktualisieren.

Hintergrundbild der Anzeige

Die perfekte Entwicklungsumgebung

Wir sorgen dafür, dass Ihre Website schnell, sicher und immer verfügbar ist, damit Ihre Besucher Ihnen vertrauen. Tarife beginnen bei $1.99/Monat.

Wählen Sie Ihren Tarif