Die erste Alpha-Version der neuen PHP 8.1-Programmiersprache wurde vorgestellt. Der Release ist für den 25. November geplant. Die wichtigsten Neuerungen, die bereits zum Testen verfügbar sind oder in PHP 8.1 implementiert werden sollen:
- Die Unterstützung von Aufzählungen wurde hinzugefügt, zum Beispiel können jetzt folgende Konstruktionen verwendet werden: enum Status { case Pending; case Active; case Archived; } class Post { public function __construct( private Status $status = Status::Pending; ) {} public function setStatus(Status $status): void { // … } } $post->setStatus(Status::Active);
- Die Unterstützung für leichte Threads, genannt Fibers, die eine Verwaltung der Parallelität auf niedriger Ebene ermöglichen, wurde hinzugefügt. Die Unterstützung für Fibers soll in die Frameworks Amphp und ReactPHP integriert werden. $fiber = new Fiber(function (): void { $valueAfterResuming = Fiber::suspend('nach der Aussetzung'); // … }); $valueAfterSuspending = $fiber->start(); $fiber->resume('nach der Wiederaufnahme');
- Die Implementierung des Opcache wurde verbessert, wobei die Möglichkeit hinzugefügt wurde, Informationen über die Vererbung von Klassen zu cachen. Diese Optimierung konnte die Leistung mancher Anwendungen um 5-8 % steigern.
- Der Unpacking-Operator innerhalb von Arrays „…$var“, der es ermöglicht, bestehende Arrays bei der Definition eines neuen Arrays zu substituieren, wurde um die Unterstützung von Schlüssel-Werten für Strings erweitert (zuvor wurden nur numerische Identifikatoren unterstützt). Zum Beispiel kann jetzt folgender Code verwendet werden: $array1 = ['a' => 1]; $array2 = ['b' => 2]; $array = ['a' => 0, …$array1, …$array2]; var_dump($array); // ['a' => 1, 'b' => 2]
- Ein neuer Typ „never“ wurde eingeführt, der verwendet werden kann, um statische Analysatoren darüber zu informieren, dass eine Funktion die Ausführung des Programms beendet, zum Beispiel durch das Auslösen einer Ausnahme oder das Ausführen der Funktion exit. function dd(mixed $input): never { exit; }
- Eine neue Funktion array_is_list wurde vorgeschlagen, die bestimmen kann, dass die Schlüssel in einem Array in aufsteigender Reihenfolge numerischer Werte, beginnend mit 0, angeordnet sind: $list = ['a', 'b', 'c']; array_is_list($list); // true $notAList = [1 => 'a', 2 => 'b', 3 => 'c']; array_is_list($notAList); // false $alsoNotAList = ['a' => 'a', 'b' => 'b', 'c' => 'c']; array_is_list($alsoNotAList); // false
- Es wurde die Möglichkeit eingeführt, Konstanten in Klassen während der Vererbung zu überschreiben. Um das Überschreiben von Konstanten der Basisklasse zu verhindern, kann das Schlüsselwort „final“ verwendet werden. class Foo { public const X = "foo"; final public const Z = "foo"; } class Bar extends Foo { public const X = "bar"; }
- Die Funktionen fsync und fdatasync wurden vorgeschlagen, um Änderungen aus dem Festplattencache zwangsweise zu speichern. $file = fopen("sample.txt", "w"); fwrite($file, "Some content"); if (fsync($file)) { echo "Die Datei wurde erfolgreich auf die Festplatte gespeichert."; } fclose($file);
- Die Verwendung von Präfixen „0o“ und „0O“ für oktale Zahlen wurde zusätzlich zum zuvor verwendeten Präfix „0“ eingeführt. 016 === 0o16; // true 016 === 0O16; // true
- Es wird vorgeschlagen, die Anwendung von $GLOBALS selektiv einzuschränken, was zu einem Verlust der Abwärtskompatibilität führen wird, jedoch die Operationen mit Arrays erheblich beschleunigen könnte. So wird beispielsweise in Erwägung gezogen, das Schreiben in $GLOBALS zu verbieten und $GLOBALS per Referenz zu übergeben. Eine Analyse von 2000 Paketen hat gezeigt, dass nur 23 davon von dieser Änderung betroffen sind. Bei Annahme des Vorschlags wird in 8.1 die Unterstützung solcher Ausdrücke eingestellt: $GLOBALS = []; $GLOBALS += []; $GLOBALS =& $x; $x =& $GLOBALS; unset($GLOBALS); by_ref($GLOBALS);
- Die Arbeit an der Umstellung von Funktionen von Ressourcennutzung auf Objektmanipulation wurde fortgesetzt. Die Funktionen finfo_* und imap_* wurden auf Objekte umgestellt.
- Die Übergabe von null-Werten als Argumente an interne Funktionen, die als non-nullable gekennzeichnet sind, wurde für veraltet erklärt. In PHP 8.1 führt die Verwendung von Konstruktionen wie str_contains("string", null) zu einer Warnung, in PHP 9 zu einem Fehler.
- Die Unterstützung für die Hash-Algorithmen MurmurHash3 und xxHash wurde hinzugefügt.
Quelle: opennet.ru
