Die Veröffentlichung von PHP 8.3

Nach einem Jahr Entwicklung wurde die Veröffentlichung der Programmiersprache PHP 8.3 vorgestellt. Der neue Zweig umfasst eine Reihe neuer Funktionen sowie mehrere Änderungen, die die Kompatibilität beeinträchtigen.

Hauptänderungen in PHP 8.3:

  • Beim Klonen von Klassen wurde die Möglichkeit zur erneuten Initialisierung von Eigenschaften mit dem Attribut „readonly“ eingeführt. Die Überschreibung von readonly-Eigenschaften ist nur innerhalb der Funktion „__clone“ erlaubt: readonly class Post { public function __construct( public DateTime $createdAt, ) {} public function __clone() { $this->createdAt = new DateTime(); // erlaubt, obwohl die Eigenschaft „createdAt“ im Nur-Lese-Modus verfügbar ist. } }
  • Die Verwendung von Typkonstanten in Klassen, Interfaces und Enums wurde ermöglicht: class Foo { const string BAR = 'baz'; }
  • Die Unterstützung des Attributs „#[Override]“ wurde hinzugefügt, mit dem der Entwickler den Interpreter darüber informieren kann, dass die gekennzeichnete Methode eine Basismethode überschreibt. Wenn keine Überschreibung erfolgt, gibt der Interpreter einen Fehler aus.
  • Die Verarbeitung von negativen Werten als Array-Indizes wurde geändert. Beispielsweise wird beim Hinzufügen eines Elements mit dem Index „-5“ zu einem leeren Array das zweite Element, das hinzugefügt wird, nun mit dem Index „-4“ gespeichert, anstatt wie zuvor mit „0“. $array = []; $array[-5] = 'a'; $array[] = 'b'; var_export($array); // Früher array (-5 => 'a', 0 => 'b') // Jetzt array (-5 => 'a', -4 => 'b')
  • Die Möglichkeit zur Erstellung von anonymen Klassen im Nur-Lese-Modus wurde hinzugefügt: $class = new readonly class { public function __construct( public string $foo = 'bar', ) {} };
  • Die Funktion json_validate() wurde hinzugefügt, um schnell zu überprüfen, ob eine Zeichenkette dem JSON-Format entspricht, ohne Dekodierungsoperationen auszuführen. json_validate(string $json, int $depth = 512, int $flags = 0): bool
  • Dem Randomizer-Klasse, die eine hochgradige API zur Erzeugung von Pseudo-Zufallszahlen und -Sequenzen bereitstellt, wurden neue Methoden hinzugefügt: getBytesFromString für die Erstellung einer Zeichenkette fester Größe, die zufällig Zeichen aus einer anderen Zeichenkette verwendet; getFloat und nextFloat zur Erzeugung einer Zufallszahl mit Komma, die in den angegebenen Bereich fällt.
  • Die Möglichkeit zur Extraktion von Konstanten unter Verwendung der Syntax dynamischer Klassen wurde hinzugefügt: class Foo { const BAR = 'bar'; } $name = 'BAR'; // Früher musste man zur Extraktion der Konstante BAR constant(Foo::class . '::' . $name); aufrufen; // Jetzt genügt es, anzugeben: Foo::{$name};
  • Es wurden separate Ausnahmen (DateMalformedIntervalStringException, DateInvalidOperationException, DateRangeError) eingeführt, die bei Problemen bei Datums- und Zeitoperationen auftreten.
  • Die Fehlerbehandlung bei der Analyse von serialisierten Daten in der Funktion unserialize() wurde verbessert. Bei Problemen gibt unseriealize() jetzt den Fehlercode E_WARNING anstelle von E_NOTICE aus.
  • Änderungen wurden an der Funktion range() vorgenommen. Bei dem Versuch, Objekte, Ressourcen oder Arrays in Variablen, die die Grenzwerte bestimmen, zu übergeben, wird nun eine Ausnahme ausgelöst, ebenso wie bei der Angabe negativer Werte im Parameter $step oder undefinierter Werte in einem der Parameter. Eine Liste von Zeichen wird ausgegeben, wenn anstelle von Zahlen Strings angegeben werden (z.B. „range('5', 'z')“).
  • Das Verhalten von Interfaces mit statischen Eigenschaften wurde geändert, die jetzt statische Eigenschaften überschreiben, die aus der Basisklasse geerbt wurden.
  • Einstellungen zum Schutz vor Stacküberlauf wurden hinzugefügt. Die Direktiven zend.max_allowed_stack_size und zend.reserved_stack_size wurden zur ini-Datei hinzugefügt, um die maximal erlaubte und reservierte Stackgröße zu definieren. Das Programm wird mit einem Fehler beendet, wenn die Anerkennung des Stacks von der Differenz zwischen zend.max_allowed_stack_size und zend.reserved_stack_size überschritten wird (die Ausführung wird gestoppt, bevor ein segmentation fault auftritt). Standardmäßig ist zend.max_allowed_stack_size auf 0 (0 - Größe wird automatisch bestimmt, zur Deaktivierung der Begrenzung kann -1 angegeben werden).
  • Neue POSIX-Funktionen posix_sysconf(), posix_pathconf(), posix_fpathconf() und posix_eaccess() wurden hinzugefügt.
  • Die Funktion mb_str_pad, die das Äquivalent der String-Funktion str_pad() für mehrbyte-Codierungen wie UTF-8 darstellt, wurde hinzugefügt.
  • Es wurde erlaubt, Closures aus Methoden zu erstellen und benannte Argumente an diese Closures zu übergeben. $test = new Test(); $closure = $test->magic(...); $closure(a: 'hello', b: 'world');
  • Das Verhalten bei der Verarbeitung der Sichtbarkeit von Konstanten in Interfaces wurde geändert. interface I { public const FOO = 'foo'; } class C implements I { private const FOO = 'foo'; }
  • Die Funktionalitäten von array_sum(), array_product(), posix_getrlimit(), gc_status(), class_alias(), mysqli_poll(), array_pad() und proc_get_status() wurden erweitert.
  • Die Möglichkeit, negative Werte in mb_strimwidth() zu übergeben, wurde als veraltet erklärt. Die Konstante NumberFormatter::TYPE_CURRENCY wurde entfernt. Die Unterstützung für den Funktionsaufruf ldap_connect() mit zwei Parametern $host und $port wurde eingestellt. Die Einstellung opcache.consistency_checks wurde entfernt.

Quelle: opennet.ru

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