Die erste Alpha-Version der neuen PHP 8.2-Programmiersprache wurde veröffentlicht. Der Release ist für den 24. November geplant. Die wichtigsten Neuerungen, die bereits zum Testen verfügbar sind oder deren Implementierung in PHP 8.2 geplant ist:
- Es wurden separate Typen „false“ und „null“ hinzugefügt, die beispielsweise für die Rückgabe eines Fehlerindikators oder eines leeren Werts durch eine Funktion verwendet werden können. Zuvor konnten „false“ und „null“ nur in Verbindung mit anderen Typen (z. B. „string|false“) verwendet werden; jetzt können sie auch separat angewendet werden: function alwaysFalse(): false { return false; }
- 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.
- Die Möglichkeit zur dynamischen Erstellung von Eigenschaften in Klassen (wie "post->unknown" im obigen Beispiel) wurde als veraltet erklärt. 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 zur Erstellung von Eigenschaften bereitstellen, oder dynamische Eigenschaften in stdClass werden weiterhin ohne Änderungen funktionieren. Die Unterstützung für die implizite Arbeit mit nicht existierenden Eigenschaften wird jedoch eingestellt, um den Entwickler vor versteckten Fehlern zu schützen. Um die Funktionsfähigkeit älterer Codes zu erhalten, wurde das Attribut "#[AllowDynamicProperties]" vorgeschlagen, das die Verwendung dynamischer Eigenschaften erlaubt.
- 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 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»]
- 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“.
Quelle: opennet.ru
