Veröffentlichung der Programmiersprache PHP 8.2

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

Wichtige Verbesserungen in PHP 8.2:

  • Es wurde die Möglichkeit hinzugefügt, eine Klasse als schreibgeschützt zu markieren. Eigenschaften in solchen Klassen können nur einmal festgelegt werden. Danach können sie nicht mehr geändert werden. Früher konnten einzelne Klasseneigenschaften als schreibgeschützt markiert werden, jetzt können Sie diesen Modus für alle Klasseneigenschaften gleichzeitig aktivieren. Durch die Angabe des „readonly“-Flags auf Klassenebene wird auch das dynamische Hinzufügen von Eigenschaften zur Klasse blockiert. readonly class Post { public function __construct( public string $title, public Author $author, ) {} } $post = new Post(/* … */); $post->unknown = 'falsch'; // Fehler: Dynamische Eigenschaft Post::$unknown kann nicht erstellt werden
  • Separate Typen „true“, „false“ und „null“ hinzugefügt, die nur einen gültigen Wert annehmen können und beispielsweise verwendet werden, um eine Funktion mit einem Fehlerbeendigungsflag oder einem leeren Wert zurückzugeben. Bisher konnten „true“, „false“ und „null“ nur in Verbindung mit anderen Typen verwendet werden (z. B. „string|false“), jetzt können sie jedoch separat verwendet werden: function AlwaysFalse(): false { return false ; }
  • Bietet die Möglichkeit, vertrauliche Einstellungen in der Stack-Trace-Ausgabe zum Zeitpunkt eines Fehlers zu filtern. Das Ausschneiden bestimmter Informationen kann erforderlich sein, wenn Informationen über aufgetretene Fehler automatisch an Dienste von Drittanbietern gesendet werden, die Probleme verfolgen und Entwickler darüber informieren. Sie können beispielsweise Parameter aus der Ablaufverfolgung ausschließen, zu denen Benutzernamen, Kennwörter und Umgebungsvariablen gehören. Funktionstest( $foo, #[\SensitiveParameter] $password, $baz ) { throw new Exception('Error'); } test('foo', 'password', 'baz'); Schwerwiegender Fehler: Nicht erfasste Ausnahme: Fehler in test.php:8 Stack-Trace: #0 test.php(11): test('foo', Object(SensitiveParameterValue), 'baz') #1 {main} in test.php geworfen online 8
  • Darf Konstanten in Merkmalen definieren (Trait, ein Mechanismus zur Wiederverwendung von Code). Auf in einem Merkmal definierte Konstanten kann über die Klasse zugegriffen werden, die das Merkmal verwendet (jedoch nicht über den Merkmalsnamen). Merkmal Foo { public const CONSTANT = 1; öffentliche Funktion bar(): int { return self::CONSTANT; // Schwerwiegender Fehler } } class Bar { use Foo; } var_dump(Bar::CONSTANT); // 1
  • Es wurde die Möglichkeit hinzugefügt, Typen in der disjunktiven Normalform (DNF, Disjunctive Normal Form) anzugeben, wodurch Sie die Vereinigung von Typen (Sammlungen von zwei oder mehr Typen) und die Schnittmenge von Typen (Typen, deren Werte unter mehrere fallen) kombinieren können Typen gleichzeitig). 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 Pseudozufallszahlen und -folgen vorgeschlagen. Das Modul bietet eine objektorientierte Schnittstelle, ermöglicht die Auswahl verschiedener Engines zur Generierung von Pseudozufallszahlen, einschließlich solcher, die für die Verwendung in der Kryptographie geeignet sind, und stellt Hilfsfunktionen bereit, beispielsweise zum zufälligen Mischen von Arrays und Strings, zur Auswahl zufälliger Array-Schlüssel, gleichzeitige Nutzung mehrerer Generatoren mit eigenem unabhängigen Zustand. $rng = $is_produktion ? new Random\Engine\Secure() : new Random\Engine\Mt19937(1234); $randomizer = new Random\Randomizer($rng); $randomizer->shuffleString('foobar');
  • Lokalisierungsunabhängige Groß-/Kleinschreibung implementiert. Funktionen wie strtolower() und strtoupper() konvertieren jetzt immer die Groß-/Kleinschreibung von Zeichen im ASCII-Bereich, wie beim Festlegen des Gebietsschemas auf „C“.
  • Neue Funktionen hinzugefügt: mysqli_execute_query, Curl_upkeep, Memory_reset_peak_usage, ini_parse_quantity, libxml_get_external_entity_loader, Natrium_crypto_stream_xchacha20_xor_ic, openssl_cipher_key_length.
  • Neue Methoden hinzugefügt: mysqli::execute_query, ZipArchive::getStreamIndex, ZipArchive::getStreamName, ZipArchive::clearError, ReflectionFunction::isAnonymous, ReflectionMethod::hasPrototype.
  • Die Möglichkeit, Eigenschaften in einer Klasse dynamisch zu erstellen, ist veraltet. In PHP 9.0 führt der Zugriff auf Eigenschaften, die ursprünglich nicht in der Klasse definiert sind, zu einem Fehler (ErrorException). Klassen, die die Methoden __get und __set zum Erstellen von Eigenschaften oder dynamische Eigenschaften in stdClass bereitstellen, funktionieren unverändert weiter. Es wird nur die implizite Arbeit mit nicht vorhandenen Eigenschaften unterstützt, um den Entwickler vor versteckten Fehlern zu schützen. Um die Arbeit des alten Codes zu erhalten, wird das Attribut „#[AllowDynamicProperties]“ vorgeschlagen, das die Verwendung dynamischer Eigenschaften ermöglicht.
  • Die Möglichkeit, Variablenwerte mithilfe der Ausdrücke „${var}“ und ${(var)}“ in Zeichenfolgen zu ersetzen, ist veraltet. Die Unterstützung für häufig verwendete Ersetzungen „{$var}“ und „$var“ wurde beibehalten. Zum Beispiel: „Hallo {$world}“; OK „Hallo $world“; OK „Hallo ${world}“; Veraltet: Die Verwendung von ${} in Strings ist veraltet
  • Teilweise unterstützte Callables, die über „call_user_func($callable)“ aufgerufen werden können, sind veraltet, unterstützen jedoch keinen Aufruf in der Form „$callable()“: „self::method“ „parent::method“ „static :: method" ["self", "method"] ["parent", "method"] ["static", "method"] ["Foo", "Bar::method"] [new Foo, "Bar: :method "]
  • Den Einstellungen wurde die Direktive error_log_mode hinzugefügt, mit der Sie den Zugriffsmodus auf das Fehlerprotokoll festlegen können.

Source: opennet.ru

Kommentar hinzufügen