Die erste Alpha-Version des neuen Zweigs der Programmiersprache PHP 8.4 wurde vorgestellt. Der Release ist für den 21. November geplant. Zu den wichtigsten Neuerungen, die bereits zum Testen verfügbar sind oder in PHP 8.4 umgesetzt werden sollen, gehören:
- Die Unterstützung für die Anheftung von Property Hooks wurde hinzugefügt, die es ermöglichen, zusätzliche Logik auszuführen, wenn auf Eigenschaften eines Objekts zugegriffen oder diese geändert werden, ohne Lese- und Schreiboperationen über die allgemeinen Funktionen __get und __set abzufangen und ohne zusätzliche Wrapper-Methoden zu erstellen. Der Einsatz von Property Hooks ermöglicht es, den Code erheblich zu reduzieren und das Überschreiben des Verhaltens bei der Arbeit mit Eigenschaften zu vereinfachen, indem ein eigener Handler an jede Eigenschaft gebunden wird. class User { public string $name { set { if (strlen($value) === 0) { throw new ValueError("Name must be non-empty"); } $this->name = $value; } } public function __construct(string $name) { $this->name = $name; } }
- Es ist nun erlaubt, Methodenreferenzen in der "new"-Konstruktion ohne trennende Klammern anzugeben, d.h. anstelle von "$name = (new MyClass())->method()" kann jetzt "$name = new MyClass()->method()" angegeben werden.
- Anstelle des allgemeinen Parameters „opcache.jit_buffer_size“ zur Steuerung des JIT-Compilers und zur Anpassung der JIT-Pufferspeichergröße wurden die Parameter „opcache.jit“ und „opcache.jit_buffer_size“ vorgeschlagen. Um JIT zu deaktivieren, kann nun „opcache.jit=disable“ anstelle von „opcache.jit_buffer_size=0“ angegeben werden. Darüber hinaus wurden Änderungen vorgenommen, die den Speicherverbrauch senken und die JIT-Leistung in bestimmten Situationen erhöhen.
- Das Verhalten, bei dem für Funktionsparameter mit einem standardmäßig zugewiesenen Wert null automatisch die Zuweisung von Werten null erlaubt wurde, wurde als veraltet erklärt. Damit solche Parameter nun Werte null annehmen können, ist die explizite Angabe des Präfixes „?“ erforderlich. Beispielsweise sollte anstelle von „function save(Book $book = null) {}“ „function save(?Book $book = null) {}“ angegeben werden.
- Die Klasse \Dom\HTMLDocument wurde implementiert, die eine korrekte Analyse der HTML5-Markup unterstützt.
- Die Funktion request_parse_body() wurde hinzugefügt, um HTTP-Anfragen mit dem Inhaltstyp multipart/form-data (RFC1867) zu analysieren.
Quelle: opennet.ru
