Die Alpha-Tests für PHP 8.1 haben begonnen.

Die erste Alpha-Version des neuen Zweigs der Programmiersprache PHP 8.1 ist erschienen. Der Release ist für den 25. November geplant. Zu den wichtigsten Neuerungen, die bereits zum Testen verfügbar sind oder in PHP 8.1 implementiert werden sollen, gehören:

  • Die Unterstützung für Enumerationen wurde hinzugefügt. Jetzt können Sie folgende Konstrukte verwenden: 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);
  • Es wurde Unterstützung für leichte Stränge eingeführt, die als Fibers bezeichnet werden und eine Verwaltung der Parallelität auf niedriger Ebene ermöglichen. Die Unterstützung von Fibers wird in den Frameworks Amphp und ReactPHP hinzugefügt. $fiber = new Fiber(function (): void { $valueAfterResuming = Fiber::suspend('after suspending'); // … }); $valueAfterSuspending = $fiber->start(); $fiber->resume('after resuming');
  • Die Implementation des Objektcode-Caches (opcache) wurde verbessert, wodurch die Möglichkeit geschaffen wurde, Informationen über die Vererbung von Klassen zu cachen. Diese Optimierung hat die Leistung einiger Anwendungen um 5-8 % gesteigert.
  • Der Entpackungsoperator innerhalb von Arrays „…$var“, der es ermöglicht, bestehende Arrays bei der Definition eines neuen Arrays einzusetzen, wurde um die Unterstützung von String-Schlüsseln erweitert (vorher wurden nur numerische Identifikatoren unterstützt). Zum Beispiel kann im Code jetzt 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 genutzt werden kann, um statische Analysatoren darüber zu informieren, dass eine Funktion die Ausführung des Programms beendet, beispielsweise 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 es ermöglicht festzustellen, ob die Schlüssel in einem Array in aufsteigender Reihenfolge numerischer Werte beginnen bei 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 einer Klasse während der Vererbung zu überschreiben. Um das Überschreiben von Konstanten der Elternklasse 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 der Festplatte gespeichert.»; } fclose($file);
  • Die Verwendung der Präfixe «0o» und «0O» für oktale Zahlen wurde neben dem zuvor verwendeten Präfix «0» hinzugefügt. 016 === 0o16; // true 016 === 0O16; // true
  • Es wurde vorgeschlagen, die Verwendung 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. Beispielweise wird geprüft, ob das Schreiben in $GLOBALS und das Übergeben von $GLOBALS per Referenz verboten werden kann. Eine Analyse von 2000 Paketen zeigt, dass nur 23 von ihnen von dieser Änderung betroffen sind. Sofern der Vorschlag genehmigt wird, 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 Übersetzung von Funktionen von der Verwendung von Ressourcen zur Manipulation von Objekten wurde fortgesetzt. Die Funktionen finfo_* und imap_* wurden auf Objekte übertragen.
  • Es wurde erklärt, dass die Übertragung von null-Werten als Argumente an interne Funktionen, die als non-nullable gekennzeichnet sind, veraltet ist. 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

Kaufen Sie zuverlässiges Hosting für Websites mit DDoS-Schutz, VPS VDS-Server 🔥 Kaufen Sie zuverlässiges Hosting für Websites mit DDoS-Schutz, VPS VDS-Server | ProHoster