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).
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.
Die Zend-Timer für die maximale Ausführungsdauer (Zend Max Execution Timers) sind nun standardmäßig für ZTS-Builds unter Linux aktiviert.
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.
Wenn einem leeren Array ein negativer Index $n
zugewiesen wird, ist der nächste Index nun immer $n+1
anstelle von 0
.
Wenn eine Klassenkonstante von einer Schnittstelle geerbt wird, wird diese nun korrekt auf Abweichung bei der Sichtbarkeit geprüft.
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.
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.
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.
C-Funktionen, die den Rückgabetyp void haben, geben nun null
anstelle des Objekts object(FFI\CData:void) { }
zurück
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.
Der Typ der Phar-Klassenkonstanten wird nun deklariert.
An der Funktion range() wurden mehrere Änderungen vorgenommen:
$step
0
übergeben
wird, wird ein aussagekräftigerer ValueError
geworfen.
$step
für steigende
Bereiche verwendet wird, wird nun ein ValueError
geworfen.
$step
eine Gleitkommazahl ist, die als
Ganzzahl interpretiert werden kann, wird sie nun als solche behandelt.
$start
oder $end
eine
leere Zeichenkette ist, wird nun ein E_WARNING
ausgegeben. Der Wert wird weiterhin in den Wert 0
umgewandelt.
start
oder end
eine
nicht-numerische Zeichenkette mit mehr als einem Byte ist, wird nun ein
E_WARNING
ausgegeben.
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.
$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).
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.
Der Typ der SNMP-Klassenkonstanten wird nun deklariert.