Die Veröffentlichung der Programmiersprache PHP 8.2.

Nach einem Jahr der Entwicklung wurde die Programmiersprache PHP 8.2 veröffentlicht. Der neue Zweig beinhaltet eine Reihe neuer Funktionen sowie einige Änderungen, die die Kompatibilität beeinträchtigen.

Wichtige Verbesserungen in PHP 8.2:

  • Die Möglichkeit, eine Klasse als schreibgeschützt zu kennzeichnen, wurde hinzugefügt. Eigenschaften in solchen Klassen können nur einmal festgelegt werden und sind danach nicht mehr änderbar. Früher konnten nur einzelne Eigenschaften einer Klasse als schreibgeschützt gekennzeichnet werden, jetzt kann dieser Modus für alle Eigenschaften einer Klasse auf einmal aktiviert werden. Das Setzen des Flags „readonly“ auf Klassenebene blockiert auch das dynamische Hinzufügen von Eigenschaften zur Klasse. readonly class Post { public function __construct( public string $title, public Author $author, ) {} } $post = new Post(/* … */); $post->unknown = 'wrong'; // Fehler: Dynamische Eigenschaft Post::$unknown kann nicht erstellt werden.
  • Es wurden separate Typen für ‚true‘, ‚false‘ und ‚null‘ eingeführt, die nur einen einzigen gültigen Wert annehmen können und beispielsweise verwendet werden können, um das Ergebnis einer Funktion mit einem Fehler oder einem leeren Wert zurückzugeben. Zuvor konnten ‚true‘, ‚false‘ und ‚null‘ nur in Verbindung mit anderen Typen verwendet werden (z.B. ‚string|false‘), jetzt können sie einzeln verwendet werden: function alwaysFalse(): false { return false; }
  • Es wurde die Möglichkeit zur Filterung sensibler Parameter in den Stack-Trace-Daten während eines Fehlers bereitgestellt. Das Entfernen bestimmter Informationen kann erforderlich sein, wenn Fehlermeldungen automatisch an externe Dienste gesendet werden, die Probleme verfolgen und die Entwickler darüber informieren. Beispielsweise können Parameter, die Benutzernamen, Passwörter und Umgebungsvariablen enthalten, aus dem Trace ausgeschlossen werden. function test( $foo, #[\SensitiveParameter] $password, $baz ) { throw new Exception('Error'); } test('foo', 'password', 'baz'); Fatal error: Uncaught Exception: Error in test.php:8 Stack trace: #0 test.php(11): test('foo', Object(SensitiveParameterValue), 'baz') #1 {main} thrown in test.php on line 8
  • Die Definition von Konstanten in Traits (ein Mechanismus zur Wiederverwendung von Code) ist erlaubt. Auf Konstanten, die in einem Trait definiert sind, kann über die Klasse zugegriffen werden, die den Trait verwendet (aber nicht über den Trait-Namen). trait Foo { public const CONSTANT = 1; public function bar(): int { return self::CONSTANT; // Fatal error } } class Bar { use Foo; } var_dump(Bar::CONSTANT); // 1
  • Добавлена возможность задания типов в дизъюнктивной нормальной форме (DNF, Disjunctive Normal Form), позволяющей совместить объединение типов (коллекции из двух и более типов) и пересечение типов (типы, значения которых подпадают одновременно под несколько типов). class Foo { public function bar((A&B)|null $entity) { if ($entity === null) { return null; } return $entity; } }
  • Es wurde eine neue Erweiterung „Random“ mit Funktionen und Klassen zur Generierung von Pseudorandom-Zahlen und -Sequenzen angeboten. Das Modul bietet eine objektorientierte Schnittstelle, ermöglicht die Auswahl verschiedener Engines zur Generierung von Pseudorandom-Zahlen, darunter auch solche, die für kryptografische Zwecke geeignet sind, und stellt Hilfsfunktionen zur Verfügung, wie das zufällige Mischen von Arrays und Strings sowie die Auswahl zufälliger Schlüssel aus Arrays, wobei mehrere Generatoren gleichzeitig mit ihrem eigenen unabhängigen Zustand verwendet werden. $rng = $is_production ? new Random\Engine\Secure() : new Random\Engine\Mt19937(1234); $randomizer = new Random\Randomizer($rng); $randomizer->shuffleString('foobar');
  • Es wurde eine lokal-unabhängige Groß- und Kleinschreibung implementiert. Funktionen wie strtolower() und strtoupper() konvertieren jetzt immer die Zeichen im ASCII-Bereich, unabhängig von der eingestellten Locale „C“.
  • Es wurden neue Funktionen hinzugefügt: mysqli_execute_query, curl_upkeep, memory_reset_peak_usage, ini_parse_quantity, libxml_get_external_entity_loader, sodium_crypto_stream_xchacha20_xor_ic, openssl_cipher_key_length.
  • Neue Methoden wurden hinzugefügt: mysqli::execute_query, ZipArchive::getStreamIndex, ZipArchive::getStreamName, ZipArchive::clearError, ReflectionFunction::isAnonymous, ReflectionMethod::hasPrototype.
  • Die Möglichkeit der dynamischen Erstellung von Eigenschaften in Klassen wurde als veraltet erklärt. In PHP 9.0 wird der Zugriff auf ursprünglich nicht definierte Eigenschaften in der Klasse zu einem Fehler (ErrorException) führen. Klassen, die die Methoden __get und __set zur Erstellung von Eigenschaften bereitstellen, oder dynamische Eigenschaften in stdClass werden weiterhin unverändert funktionieren. Unterstützt wird nur die implizite Arbeit mit nicht existierenden Eigenschaften eingestellt, um den Entwickler vor versteckten Fehlern zu schützen. Um die Funktionalität des alten Codes zu bewahren, wurde das Attribut «#[AllowDynamicProperties]» eingeführt, das die Verwendung von dynamischen Eigenschaften erlaubt.
  • Die Möglichkeit, Variablenwerte in Strings mit den Ausdrücken «${var}» und ${(var)}» einzufügen, wurde als veraltet erklärt. Die Unterstützung gängiger Einfügungen wie «{$var}» und «$var» bleibt erhalten. Zum Beispiel: «Hello {$world}»; OK «Hello $world»; OK «Hello ${world}»; Deprecated: Die Verwendung von ${} in Strings ist veraltet.
  • Teilweise unterstützte callable-Objekte, die über „call_user_func($callable)“ aufgerufen werden können, aber nicht in der Form „$callable()“ unterstützt werden, gelten als veraltet: «self::method» «parent::method» «static::method» [«self», «method»] [«parent», «method»] [«static», «method»] [«Foo», «Bar::method»] [new Foo, «Bar::method»]
  • Der Einstellungen wurde die Direktive error_log_mode hinzugefügt, die es ermöglicht, den Zugriffsmodus auf das Fehlerprotokoll festzulegen.

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