Der Typ iterable ist nun ein eingebauter Compile-Time-Alias für array|Traversable. Fehlermeldungen, die sich auf iterable
beziehen, werden daher nun array|Traversable
verwenden. Die Type-Reflection wird für einzelne iterable
(und ?iterable
) beibehalten, um einen ReflectionNamedType mit dem Namen iterable
zu erzeugen, jedoch wird die Bezeichnung iterable
in Union-Typen (zusammengefassten Typen) in array|Traversable
umgewandelt.
Das Datumsformat gesendeter Cookies ist nun 'D, d M Y H:i:s \G\M\T'
; vorher war es 'D, d-M-Y H:i:s T'
.
Die Streams von STDOUT, STDERR und STDIN werden nicht mehr geschlossen, wenn eine Ressource zerstört wird, was meistens der Fall ist, wenn die CLI beendet wird. Es ist jedoch immer noch möglich, diese Streams mit der Funktion fclose() und ähnlichen explizit zu schließen.
Die Funktionen strcmp(), strcasecmp(), strncmp(), strncasecmp() und substr_compare(), die den binärsicheren Vergleich von Zeichenketten verwenden, geben nun -1
, 0
und 1
zurück.
Die Funktionen dba_open() und dba_popen() verlangen nun zwingend die folgende Signatur:
$path
,$mode
,$handler
= null
,$permission
= 0644,$map_size
= 0,$flags
= null
Bei der Funktion dba_fetch() steht der optionale Parameter skip nun am Ende und folgt damit der Semantik von PHPs benutzerdefinierten Funktionen. Die Signatur lautet nun:
Die überladene Signatur: wird weiterhin akzeptiert, aber es wird empfohlen, die neue Standardvariante zu verwenden.Die Funktionen random_bytes() und random_int() lösen bei CSPRNG-Fehlern nun eine \Random\RandomException aus. Zuvor wurde stattdessen eine einfache \Exception ausgelöst.
Bei den Funktionen iterator_to_array() und iterator_count() wurde der Parameter iterator
von Iterator auf iterable erweitert, wodurch Arrays übergeben werden können.
Die Eigenschaften von DatePeriod werden nun korrekt deklariert.
Die Instanzen von IntlBreakIterator, IntlRuleBasedBreakIterator, IntlCodePointBreakIterator, IntlPartsIterator, IntlCalendar, Collator, IntlIterator, UConverter, IntlDateFormatter, IntlDatePatternGenerator, MessageFormatter, ResourceBundle, Spoofchecker, IntlTimeZone, und Transliterator sind nicht mehr serialisierbar. Zuvor konnten sie zwar serialisiert werden, aber wenn sie deserialisiert wurden, erzeugten sie unbrauchbare Objekte oder die Deserialisierung schlug fehl.
Die Unterstützung für libmysql wurde entfernt und es ist nicht mehr möglich, mysqli mit libmysql zu kompilieren. Die Erweiterung mysqli kann von nun an nur noch mit mysqlnd kompiliert werden. Alle libmysql-Features, die in mysqlnd nicht verfügbar sind, wurden entfernt:
MYSQLI_IS_MARIADB
ist veraltetDie benötigte Mindestversion der Oracle-Client-Bibliothek ist nun 11.2.
NUL-Zeichen (\0
) in Suchmustern werden nun unterstützt.
Der Versuch, die INI-Direktive session.cookie_samesite zu ändern, während die Session aktiv ist oder nachdem bereits eine Ausgabe gesendet wurde, schlägt nun fehl und gibt eine Warnung aus. Damit wird das Verhalten an alle anderen INI-Einstellungen für Sessions angeglichen.
sqlite3.defensive ist nun INI_USER
.
Die Funktion getimagesize() meldet nun die tatsächlichen Abmessungen, Bits und Kanäle von AVIF-Bildern; zuvor wurden die Abmessungen als 0x0
zurückgegeben, und Bits und Kanäle wurden überhaupt nicht zurückgegeben.
Die Eigenschaften der Klasse tidy sind nun korrekt deklariert; die der Klasse tidyNode sind nun korrekt als schreibgeschützt deklariert.
Die Erweiterung Zip wurde auf Version 1.20.0 aktualisiert, wodurch die folgenden Methoden hinzugefügt wurden:
Die INI-Direktiven für Integerwerte wurden um die Möglichkeit erweitert, binäre (0b
/0B
) und oktale (0o
/0O
) Präfixe anzugeben. INI-Direktiven, die mit einer Null (0
) beginnen, werden weiterhin als oktaler Integer interpretiert.
Wenn bestimmte schlecht formatierte Werte verarbeitet werden, wird nun eine Warnung ausgegeben, während dies zuvor stillschweigend ignoriert wurde. Aus Gründen der Abwärtskompatibilität werden diese Werte weiterhin so interpretiert wie bisher. Dies betrifft die folgenden Einstellungen: