Veröffentlichung der Programmiersprache PHP 8.3

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

Wichtige Änderungen in PHP 8.3:

  • Beim Klonen von Klassen ist es möglich, Eigenschaften mit dem Attribut „readonly“ neu zu initialisieren. Das Überschreiben von schreibgeschützten Eigenschaften ist nur innerhalb der Funktion „__clone“ zulässig: readonly class Post { public function __construct( public DateTime $createdAt, ) {} public function __clone() { $this->createdAt = new DateTime(); // erlaubt, auch wenn die Eigenschaft „createdAt“ schreibgeschützt ist. } }
  • Die Möglichkeit, Konstanten mit Typangabe in Klassen, Merkmalen und Aufzählungen zu verwenden, wurde bereitgestellt: class Foo { const string BAR = 'baz'; }
  • Unterstützung für das Attribut „#[Override]“ hinzugefügt, mit dem der Entwickler den Interpreter darüber informieren kann, dass die markierte Methode eine übergeordnete Methode überschreibt. Wenn keine Überschreibung erfolgt, zeigt der Interpreter einen Fehler an.
  • Behandlung negativer Werte als Array-Index geändert. Wenn Sie beispielsweise ein Element mit der Nummer „-5“ zu einem leeren Array hinzufügen und ein weiteres Element hinzufügen, wurde das zweite Element zuvor mit dem Index „0“ gespeichert, ab Version PHP 8.3 wird es jedoch mit dem Index „-4“ gespeichert. . $array = []; $array[-5] = 'a'; $array[] = 'b'; var_export($array); // War Array (-5 => 'a', 0 => 'b') // Wurde Array (-5 => 'a', -4 => 'b')
  • Es wurde die Möglichkeit hinzugefügt, anonyme Klassen im schreibgeschützten Modus zu erstellen: $class = new readonly class { public function __construct( public string $foo = 'bar', ) {} };
  • Funktion json_validate() hinzugefügt, um schnell zu überprüfen, ob eine Zeichenfolge im JSON-Format vorliegt, ohne Decodierungsvorgänge durchzuführen. json_validate(string $json, int $ Depth = 512, int $flags = 0): bool
  • Der Randomizer-Klasse wurden neue Methoden hinzugefügt, die eine High-Level-API zum Generieren von Pseudozufallszahlen und -sequenzen bereitstellt: getBytesFromString zum Generieren einer Zeichenfolge einer bestimmten Größe, wobei die in einer anderen Zeichenfolge vorhandenen Zeichen in zufälliger Reihenfolge verwendet werden; getFloat und nextFloat, um eine zufällige Gleitkommazahl zu generieren, die innerhalb des angegebenen Bereichs liegt.
  • Es wurde die Möglichkeit hinzugefügt, Konstanten mithilfe der dynamischen Klassensyntax abzurufen: class Foo { const BAR = 'bar'; } $name = 'BAR'; // Um ​​die BAR-Konstante abzurufen, mussten Sie bisher konstant(Foo::class . '::' . $name); aufrufen. // Geben Sie jetzt einfach Foo::{$name};
  • Generierung einzelner Ausnahmen (DateMalformedIntervalStringException, DateInvalidOperationException, DateRangeError) hinzugefügt, falls Probleme bei Operationen auftreten, die mit Datum und Uhrzeit arbeiten.
  • Verbesserte Behandlung von Fehlern, die beim Parsen serialisierter Daten in der Funktion unserialize() auftreten. Bei Problemen gibt unserialize() nun E_WARNING statt E_NOTICE aus.
  • An der Funktion range() wurden Änderungen vorgenommen. Eine Ausnahme wird generiert, wenn versucht wird, Objekte, Ressourcen oder Arrays in Variablen zu übergeben, die Bereichsgrenzen definieren, sowie wenn ein negativer Wert im $step-Parameter oder ein undefinierter Wert in einem beliebigen Parameter angegeben wird. Bei der Angabe von Zeichenfolgen anstelle von Zahlen (z. B. „range('5', 'z')") kann nun eine Liste mit Zeichen ausgegeben werden.
  • Das Verhalten von Merkmalen mit statischen Eigenschaften wurde geändert, die nun von der übergeordneten Klasse geerbte statische Eigenschaften überschreiben.
  • Einstellungen für den Stapelüberlaufschutz hinzugefügt. Die Anweisungen zend.max_allowed_stack_size und zend.reserved_stack_size wurden zur INI-Datei hinzugefügt und definieren die maximal zulässige und reservierte Stapelgröße. Das Programm stürzt ab, wenn der Stapel erschöpft ist und der Stapel mehr als die Differenz zwischen zend.max_allowed_stack_size und zend.reserved_stack_size überschreitet (die Ausführung wird gestoppt, bevor ein Segmentierungsfehler auftritt). Standardmäßig ist der Wert zend.max_allowed_stack_size auf 0 gesetzt (0 – die Größe wird automatisch bestimmt; um die Einschränkung zu deaktivieren, können Sie sie auf -1 setzen).
  • Neue POSIX-Funktionen posix_sysconf(), posix_pathconf(), posix_fpathconf() und posix_eaccess() hinzugefügt.
  • Es wurde die Funktion mb_str_pad hinzugefügt, die ein Analogon der String-Funktion str_pad() ist und für die Arbeit mit Multibyte-Kodierungen wie UTF-8 konzipiert ist.
  • Ermöglicht Ihnen, Abschlüsse aus Methoden zu erstellen und benannte Argumente an diese Abschlüsse zu übergeben. $test = neuer Test(); $closure = $test->magic(…); $closure(a: 'Hallo', b: 'Welt');
  • Geändertes Verhalten beim Umgang mit der Sichtbarkeit von Konstanten in Schnittstellen. Schnittstelle I { public const FOO = 'foo'; } Klasse C implementiert I { private const FOO = 'foo'; }
  • Die Funktionen der Funktionen array_sum(), array_product(), posix_getrlimit(), gc_status(), class_alias(), mysqli_poll(), array_pad() und proc_get_status() wurden erweitert.
  • Die Möglichkeit, einen negativen $widths-Wert an mb_strimwidth() zu übergeben, ist veraltet. Die NumberFormatter::TYPE_CURRENCY-Konstante wurde entfernt. Die Unterstützung für den Aufruf der Funktion ldap_connect() mit zwei Parametern $host und $port wurde eingestellt. Die Einstellung opcache.consistency_checks wurde entfernt.

Source: opennet.ru

Kommentar hinzufügen