PHP 8.4.1 Released!

Nicht abwärtskompatible Änderungen

PHP-Kern

Programme, die beinahe zum Stapelüberlauf geführt hätten

Programme, die sehr nahe daran waren, einen Überlauf des Aufrufstapels zu verursachen, können nun einen Error werfen, wenn sie mehr als zend.max_allowed_stack_size-zend.reserved_stack_size Bytes des Stapels verwenden (fiber.stack_size-zend.reserved_stack_size bei Fibers).

Mehrmaliges Ausführen von proc_get_status()

Die Funktion proc_get_status() gibt auf POSIX-Systemen nun immer den richtigen Wert zurück, wenn sie mehrfach ausgeführt wird. Zuvor lieferte nur der erste Aufruf den richtigen Wert. Auch proc_close() gibt nun den richtigen Exit-Code zurück, wenn es nach proc_get_status() ausgeführt wird. Zuvor wurde in diesem Fall -1 zurückgegeben. Intern funktioniert dies, indem das Ergebnis auf POSIX-Systemen zwischengespeichert wird. Wenn das vorherige Verhalten benötigt wird, kann der Schlüssel "cached" in dem von proc_get_status() zurückgegebenen Array überprüft werden, um zu sehen, ob das Ergebnis zwischengespeichert wurde.

Zend-Timer für die maximale Ausführungsdauer

Die Zend-Timer für die maximale Ausführungsdauer (Zend Max Execution Timers) sind nun standardmäßig für ZTS-Builds unter Linux aktiviert.

Verwendung von Traits mit statischen Eigenschaften

Wenn Traits mit statischen Eigenschaften verwendet werden, werden nun die von der Elternklasse geerbten statischen Eigenschaften neu deklariert. Dadurch wird für die aktuelle Klasse ein separater Speicher für statische Eigenschaften angelegt. Dies ist vergleichbar mit dem direkten Hinzufügen statischer Eigenschaften zur Klasse ohne Traits.

Zuweisung eines negativen Indexes an ein leeres Array

Wenn einem leeren Array ein negativer Index $n zugewiesen wird, ist der nächste Index nun immer $n+1 anstelle von 0.

Überprüfung von Klassenkonstanten auf Sichtbarkeitsabweichungen

Wenn eine Klassenkonstante von einer Schnittstelle geerbt wird, wird diese nun korrekt auf Abweichung bei der Sichtbarkeit geprüft.

WeakMap-Einträge, deren Schlüssel auf sich selbst verweisen

Wenn der Schlüssel eines WeakMap-Eintrags auf sich selbst verweist (möglicherweise transitiv) und nur durch Iteration über die WeakMap erreichbar ist (die Erreichbarkeit durch Iteration wird als schwach angesehen), kann dieser Eintrag nun während der Sammlung von Zyklen entfernt werden. Zuvor wurden solche Einträge nie automatisch entfernt.

Date

Für die DateTime-Erweiterung wurden unter den Hierarchien DateError und DateException erweiterungsspezifische Fehler und Exceptions eingeführt, die Warnungen und generische Exceptions ersetzen. Dies verbessert die Fehlerbehandlung, erfordert aber eine Überprüfung auf Fehler und Exceptions.

DOM

Der Aufruf von DOMChildNode::after(), DOMChildNode::before() und DOMChildNode::replaceWith() auf einem Knoten, der kein Elternteil hat, ist nun eine Nulloperation (bewirkt nichts), anstatt eine Hierarchie-Exception zu werfen, was dem von der DOM-Spezifikation geforderten Verhalten entspricht.

Die Methoden DOMParentNode und DOMChildNode können nun auch ohne ein Dokument verwendet werden, ohne dass eine DOM_HIERARCHY_REQUEST_ERR-DOMException geworfen wird. Dies entspricht dem von der DOM-Spezifikation geforderten Verhalten.

Wenn DOMDocument::createAttributeNS() ohne die Angabe eines Präfixes aufgerufen wurde, wurde fälschlicherweise ein Standard-Namensraum erstellt und das Element in den Namensraum statt in das Attribut eingefügt. Dieser Fehler ist nun behoben.

Wenn ein Präfix bereits für einen anderen URI verwendet wurde, hat DOMDocument::createAttributeNS() bisher fälschlicherweise eine DOM_NAMESPACE_ERRNAMESPACE_ERR-DOMException geworfen. Nun wird bei einem Konflikt mit dem Präfixnamen korrekterweise ein anderes Präfix gewählt.

Zu einigen DOM-Klassen wurden neue Methoden und Eigenschaften hinzugefügt. Wenn eine benutzerdefinierte Klasse von diesen Klassen erbt und eine Methode oder Eigenschaft mit dem gleichen Namen deklariert, müssen die Deklarationen kompatibel sein. Andernfalls führt dies zu einem typischen Kompilierfehler wegen inkompatibler Deklarationen. Informationen über die neu implementierten Methoden und Eigenschaften sind in den Listen der neuen Features und neuen Funktionen zu finden.

FFI

C-Funktionen, die den Rückgabetyp void haben, geben nun null anstelle des Objekts object(FFI\CData:void) { } zurück

Opcache

Die INI-Direktive opcache.consistency_checks wurde entfernt. Dieses Feature war sowohl in Verbindung mit dem Tracing-JIT als auch mit dem Vererbungscache defekt und ist seit PHP 8.1.18 und PHP 8.2.5 deaktiviert, ohne dass es eine Möglichkeit gibt, es zu aktivieren. Sowohl das Tracing-JIT als auch der Vererbungscache können den gemeinsamen Speicher (shm) verändern, nachdem das Skript persistent gemacht wurde, indem sie seine Prüfsumme ungültig machen. Die geplante Korrektur sah vor, die veränderbaren Zeiger zu überspringen, wurde aber aufgrund der Komplexität verworfen. Daher wurde stattdessen beschlossen, diese Funktion zu entfernen.

Phar

Der Typ der Phar-Klassenkonstanten wird nun deklariert.

Standard

An der Funktion range() wurden mehrere Änderungen vorgenommen:

  • Wenn Objekte, Ressourcen oder Arrays als begrenzende Werte übergeben werden, wird nun ein TypeError geworfen.
  • Wenn für $step 0 übergeben wird, wird ein aussagekräftigerer ValueError geworfen.
  • Wenn ein negativer von $step für steigende Bereiche verwendet wird, wird nun ein ValueError geworfen.
  • Wenn $step eine Gleitkommazahl ist, die als Ganzzahl interpretiert werden kann, wird sie nun als solche behandelt.
  • Wenn ein Argument unendlich oder NAN ist, wird nun ein ValueError geworfen.
  • Wenn $start oder $end eine leere Zeichenkette ist, wird nun ein E_WARNING ausgegeben. Der Wert wird weiterhin in den Wert 0 umgewandelt.
  • Wenn start oder end eine nicht-numerische Zeichenkette mit mehr als einem Byte ist, wird nun ein E_WARNING ausgegeben.
  • Wenn start oder end eine Zeichenkette ist, die implizit in eine Ganzzahl umgewandelt wird, weil der andere begrenzende Werte eine Zahl ist (z. B. range(5, 'z');), wird nun ein E_WARNING ausgegeben.
  • Wenn $step eine Gleitkommazahl ist, wird nun ein E_WARNING ausgegeben, wenn versucht wird, einen Bereich von Zeichen zu erzeugen, es sei denn, beide begrenzenden Werte sind numerische Zeichenketten (z. B. verursacht range('5', '9', 0.5); keine Warnung).
  • Wenn einer der begrenzenden Werte eine Ziffer in Form einer Zeichenkette ist (z. B. range('9', 'A');), erzeugt range() nun eine Liste von Zeichen, anstatt den anderen Wert in eine Ganzzahl umzuwandeln.
<?php
range
('9', 'A'); // ["9", ":", ";", "<", "=", ">", "?", "@", "A"], seit PHP 8.3.0
range('9', 'A'); // [9, 8, 7, 6, 5, 4, 3, 2, 1, 0], vor PHP 8.3.0
?>

Die Funktion number_format() verarbeitet nun negative $decimals-Werte, indem $num auf abs($decimals) Ziffern vor dem Dezimaltrennzeichen gerundet wird; zuvor wurden negative $decimals-Werte ignoriert.

Die Flags-Fehlerprüfung der Funktion file() fängt nun alle ungültigen Flags ab. Insbesondere FILE_APPEND wurde bisher stillschweigend akzeptiert.

SNMP

Der Typ der SNMP-Klassenkonstanten wird nun deklariert.

add a note

User Contributed Notes

There are no user contributed notes for this page.
To Top