Programs that were very close to overflowing the call stack
Programs that were very close to overflowing the call stack may now throw an
Error when using more than
zend.max_allowed_stack_size-zend.reserved_stack_size bytes of stack
(fiber.stack_size-zend.reserved_stack_size for fibers).
Executing proc_get_status() multiple times
Executing proc_get_status() multiple times will now always
return the right value on POSIX systems. Previously, only the first call
of the function returned the right value. Executing
proc_close() after proc_get_status()
will now also return the right exit code. Previously this would return
-1.
Internally, this works by caching the result on POSIX systems.
If the previous behaviour is required, it is possible to check the
"cached" key in the array returned by
proc_get_status() to check whether the result was cached.
Zend Max Execution Timers
Zend Max Execution Timers is now enabled by default for ZTS builds on
Linux.
Uses of traits with static properties
Uses of traits with static properties will now redeclare static properties
inherited from the parent class. This will create a separate static
property storage for the current class. This is analogous to adding the
static property to the class directly without traits.
Assigning a negative index to an empty array
Assigning a negative index $n to an empty array will now make sure that the
next index is $n+1 instead of 0.
Class constant visibility variance check
Class constant visibility variance is now correctly checked when inherited
from interfaces.
WeakMap entries whose key maps to itself
WeakMap entries whose key maps to itself (possibly
transitively) may now be removed during cycle collection if the key is not
reachable except by iterating over the WeakMap (reachability via iteration is
considered weak).
Previously, such entries would never be automatically removed.
Date
The DateTime extension has introduced Date extension specific exceptions
and errors under the DateError and
DateException hierarchies, instead of warnings and
generic exceptions. This improves error handling, at the expense
of having to check for errors and exceptions.
Calling DOMDocument::createAttributeNS() without specifying
a prefix would incorrectly create a default namespace, placing the element
inside the namespace instead of the attribute. This bug is now fixed.
DOMDocument::createAttributeNS() would previously
incorrectly throw a DOM_NAMESPACE_ERRNAMESPACE_ERRDOMException when the prefix was already used for a
different URI. It now correctly chooses a different prefix when there's a
prefix name conflict.
New methods and properties were added to some DOM classes.
If a userland class inherits from these classes and declare a method or property
with the same name, the declarations must be compatible. Otherwise, a typical
compile error about incompatible declarations will be thrown.
See the list of new features
and new functions for
a list of the newly implemented methods and properties.
FFI
C functions that have a return type of void now return null instead of
returning the following object object(FFI\CData:void) { }
Opcache
The opcache.consistency_checks
INI directive was removed. This feature was broken with the tracing JIT,
as well as with inheritance cache, and has been disabled without a way to
enable it since PHP 8.1.18 and PHP 8.2.5.
Both the tracing JIT and inheritance cache may modify shm after the script
has been persisted by invalidating its checksum. The attempted fix skipped
over the modifiable pointers but was rejected due to complexity. For this
reason, it was decided to remove the feature instead.
Phar
The type of Phar class constants are now declared.
A more descriptive ValueError is thrown when
passing 0 for step.
A ValueError is now thrown when using a
negative step for increasing ranges.
If step is a float that can be interpreted
as an int, it is now done so.
A ValueError is now thrown if any argument
is infinity or NAN.
An E_WARNING is now emitted if
start or end is the empty
string. The value continues to be cast to the value 0.
An E_WARNING is now emitted if
start or end has more than
one byte, only if it is a non-numeric string.
An E_WARNING is now emitted if
start or end is cast to an
integer because the other boundary input is a number.
(e.g. range(5, 'z');).
An E_WARNING is now emitted if
step is a float when trying to generate a range of
characters, except if both boundary inputs are numeric strings (e.g.
range('5', '9', 0.5); does not produce a warning).
range() now produce a list of characters if one
of the boundary inputs is a string digit instead of casting the other input
to int (e.g. range('9', 'A');).
number_format() now handles negative
decimals values by rounding
num to abs($decimals) digits before the
decimal point. Previously, negative decimals values
were ignored.
The file() flags error check now catches all invalid flags.
Notably FILE_APPEND was previously silently accepted.
SNMP
The type of SNMP class constants are now declared.