Skip to content

[skip ci] Group similar entries in UPGRADING #16420

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 4 commits into from
Oct 15, 2024
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
217 changes: 103 additions & 114 deletions UPGRADING
Original file line number Diff line number Diff line change
Expand Up @@ -40,13 +40,108 @@ PHP 8.4 UPGRADE NOTES
removed.
RFC: https://wiki.php.net/rfc/deprecations_php_8_4#remove_e_strict_error_level_and_deprecate_e_strict_constant

- Date:
. The class constants are typed now.

- DBA:
. dba_open() and dba_popen() will now return a Dba\Connection
object rather than a resource. Return value checks using is_resource()
should be replaced with checks for `false`.
- Extension Class constants are now typed:
. Date
. Intl
. PDO
. Reflection
. SPL
. Sqlite
. XMLReader

- Resource to Object conversions:
Return value checks using is_resource() should be replaced with checks
for `false`, unless specified otherwise.
. DBA:
. dba_open() and dba_popen() will now return Dba\Connection
. ODBC:
. odbc_connect() and odbc_pconnect() will now return Odbc\Connection
. odbc_prepare(), odbc_exec(), and various other functions will now return
Odbc\Result
. SOAP:
. SoapClient::$httpurl is now a Soap\Url object rather than a resource.
Checks using is_resource() (i.e. is_resource($client->httpurl)) should be
replaced with checks for null (i.e. $client->httpurl !== null).
. SoapClient::$sdl is now a Soap\Sdl object rather than a resource.
Checks using is_resource() (i.e. is_resource($client->sdl)) should be
replaced with checks for null (i.e. $client->sdl !== null).

- New warnings and exceptions:
. Curl:
. curl_multi_select throws a ValueError if the timeout argument if it's negative
or greater than PHP_INT_MAX.
. GD:
. imagejpeg/imagewebp/imagepng/imageavif throws an exception if an invalid
quality parameter value is passed. In addition, imageavif will throw an exception
if an invalid speed parameter value is passed.
. imagescale throws an exception if the width/height argument underflows/overflows or
if the mode argument is invalid.
imagefilter with IMG_FILTER_SCATTER throws an exception if the sub/plus arguments
underflows/overflows.
. Gettext:
. bind_textdomain_codeset, textdomain and d(*)gettext functions now throw an exception
if the domain argument is empty.
. Intl:
. resourcebundle_get(), ResourceBundle::get(), and accessing offsets on a
ResourceBundle object now throw:
- TypeError for invalid offset types
- ValueError for an empty string
- ValueError if the integer index does not fit in a signed 32 bit integer
. IntlDateFormatter::__construct() throws a ValueError if the locale is invalid.
. NumberFormatter::__construct() throws a ValueError if the locale is invalid.
. MBString:
. mb_encode_numericentity() and mb_decode_numericentity() now check that
the $map is only composed of integers, if not a ValueError is thrown.
. mb_http_input() now always throws a ValueError if the $type is invalid.
. mb_http_output() now checks that the $encoding parameter does not
contain any null bytes. If it does, a ValueError is now thrown.
. ODBC:
. odbc_fetch_row() now emits a warning when a value less than or equal to 0 is
passed for parameter $row.
. PCNTL:
. The functions pcntl_sigprocmask(), pcntl_sigwaitinfo() and
pcntl_sigtimedwait() now throw:
- A ValueError if the $signals array is empty (except for
pcntl_sigprocmask() if the $mode is SIG_SETMASK).
- A TypeError if a value of the $signals array is not an integer
- A ValueError if a value of the $signals array is not a valid signal number
. The function pcntl_sigprocmask() now throw:
- A ValueError if $mode is not one of SIG_BLOCK, SIG_UNBLOCK, or SIG_SETMASK
. The function pcntl_sigtimedwait() now throw:
- A ValueError if $seconds is less than 0
- A ValueError if $nanoseconds is less than 0 or greater than 1e9
- A ValueError if both $seconds and $nanoseconds are 0
. SimpleXML:
. Calling simplexml_import_dom() with a non-XML object now throws a
TypeError instead of a ValueError.
. Standard:
. round() now validates the value of the $mode parameter and throws a
ValueError for invalid modes. Previously invalid modes would have been
interpreted as PHP_ROUND_HALF_UP.
. The str_getcsv() function now throws ValueErrors when the $separator and
$enclosure arguments are not one byte long, or if the $escape is not one
byte long or the empty string. This aligns the behaviour to be identical
to that of fputcsv() and fgetcsv().
. php_uname() now throws ValueErrors if the $move parameter is invalid.
. The "allowed_classes" option for unserialize() now throws TypeErrors and
ValueErrors if it is not an array of class names.
. XMLReader:
. Passing an invalid character encoding to XMLReader::open() or
XMLReader::XML() now throws a ValueError.
. Passing a string containing null bytes previously emitted a
warning and now throws a ValueError as well.
. XMLWriter:
. Passing a string containing null bytes previously emitted a
warning and now throws a ValueError as well.
. XSL:
. XSLTProcessor::setParameter() will now throw a ValueError when its
arguments contain null bytes. This never actually worked correctly in
the first place, which is why it throws an exception nowadays.
. Calling XSLTProcessor::importStyleSheet() with a non-XML object now
throws a TypeError instead of a ValueError.
. Failure to call a PHP function callback during evaluation now throws
instead of emitting a warning.
RFC: https://wiki.php.net/rfc/improve_callbacks_dom_and_xsl

- DOM:
. Some DOM methods previously returned false or a PHP_ERR DOMException if a new
Expand All @@ -64,20 +159,7 @@ PHP 8.4 UPGRADE NOTES
. The GMP class is now final and cannot be extended anymore.
RFC: https://wiki.php.net/rfc/gmp-final

- Intl:
. resourcebundle_get(), ResourceBundle::get(), and accessing offsets on a
ResourceBundle object now throw:
- TypeError for invalid offset types
- ValueError for an empty string
- ValueError if the integer index does not fit in a signed 32 bit integer
. The class constants are typed now.

- MBString:
. mb_encode_numericentity() and mb_decode_numericentity() now check that
the $map is only composed of integers, if not a ValueError is thrown.
. mb_http_input() now always throws a ValueError if the $type is invalid.
. mb_http_output() now checks that the $encoding parameter does not
contain any null bytes. If it does, a ValueError is now thrown.
. On invalid strings (those with encoding errors), mb_substr() now interprets
character indices in the same manner as most other mbstring functions. This
means that character indices returned by mb_strpos() can be passed to mb_substr().
Expand All @@ -103,16 +185,6 @@ PHP 8.4 UPGRADE NOTES
. The error code reported for MySQL server wait timeouts has been changed from 2006
to 4031 for MySQL server versions 8.0.24 and above.

- ODBC:
. odbc_fetch_row() returns false when a value less than or equal to 0 is
passed for parameter $row. Now, a warning is emitted in this case.
. odbc_connect() and odbc_pconnect() will now return an Odbc\Connection
object rather than a resource. Return value checks using is_resource()
should be replaced with checks for `false`.
. odbc_prepare(), odbc_exec(), and various other functions will now return
an Odbc\Result object rather than a resource. Return value checks using
is_resource() should be replaced with checks for `false`.

- Opcache:
. The JIT config defaults changed from opcache.jit=tracing and
opcache.jit_buffer_size=0 to opcache.jit=disable and
Expand All @@ -129,19 +201,8 @@ PHP 8.4 UPGRADE NOTES

- PCNTL:
. The functions pcntl_sigprocmask(), pcntl_sigwaitinfo() and
pcntl_sigtimedwait() now throw:
- A ValueError if the $signals array is empty (except for
pcntl_sigprocmask() if the $mode is SIG_SETMASK).
- A TypeError if a value of the $signals array is not an integer
- A ValueError if a value of the $signals array is not a valid signal number
Moreover, those functions now always return false on failure.
pcntl_sigtimedwait() now always return false on failure.
In some case previously it could return the value -1.
. The function pcntl_sigprocmask() will also now throw:
- A ValueError if $mode is not one of SIG_BLOCK, SIG_UNBLOCK, or SIG_SETMASK
. The function pcntl_sigtimedwait() will also now throw:
- A ValueError if $seconds is less than 0
- A ValueError if $nanoseconds is less than 0 or greater than 1e9
- A ValueError if both $seconds and $nanoseconds are 0

- PCRE:
. The bundled pcre2lib has been updated to version 10.44.
Expand All @@ -150,9 +211,6 @@ PHP 8.4 UPGRADE NOTES
has changed. Consult https://github.com/PCRE2Project/pcre2/blob/master/NEWS
for a full changelog.

- PDO:
. The class constants are typed now.

- PDO_DBLIB:
. setAttribute, DBLIB_ATTR_STRINGIFY_UNIQUEIDENTIFIER and DBLIB_ATTR_DATETIME_CONVERT
have been changed to set value as a bool.
Expand All @@ -166,34 +224,20 @@ PHP 8.4 UPGRADE NOTES
- PDO_MYSQL:
. getAttribute, ATTR_AUTOCOMMIT, ATTR_EMULATE_PREPARES, MYSQL_ATTR_DIRECT_QUERY have
been changed to get values as bool.
. Quoting a string with PARAM_LOB as type now outputs the string explicitly quoted
as binary. This also affects parameters bound as PARAM_LOB when
ATTR_EMULATE_PREPARES is enabled.

- PDO_PGSQL:
. The DSN's credentials, when set, are given priority over their PDO
constructor counterparts, being closer to the documentation states.

- Reflection:
. The class constants are typed now.

- SimpleXML:
. Get methods called, or casting to a string on a SimpleXMLElement will no
longer implicitly reset the iterator data, unless explicitly rewound.
For example, casting an element to a string within a foreach loop would
cause an infinite loop because it destroyed the current iterator data.
This is no longer the case as a consequence of the bugfixes for GH-12192,
GH-12208, #55098.
. Calling simplexml_import_dom() with a non-XML object now throws a TypeError
instead of a ValueError.

- SOAP:
. SoapClient::$httpurl is now a Soap\Url object rather than a resource.
Checks using is_resource() (i.e. is_resource($client->httpurl)) should be
replaced with checks for null (i.e. $client->httpurl !== null).
. SoapClient::$sdl is now a Soap\Sdl object rather than a resource.
Checks using is_resource() (i.e. is_resource($client->sdl)) should be
replaced with checks for null (i.e. $client->sdl !== null).
. SoapClient::$typemap is now an array rather than a resource.
Checks using is_resource() (i.e. is_resource($client->typemap)) should be
replaced with checks for null (i.e. $client->typemap !== null).
Expand All @@ -202,25 +246,9 @@ PHP 8.4 UPGRADE NOTES
you will experience errors on startup if you also use the SOAP extension.
To solve this, either don't use rtld-now or load the session extension.

- SPL:
. The class constants are typed now.

- Sqlite:
. The class constants are typed now.

- Standard:
. round() now validates the value of the $mode parameter and throws a ValueError
for invalid modes. Previously invalid modes would have been interpreted as
PHP_ROUND_HALF_UP.
. strcspn() with empty $characters now returns the length of the string instead
of incorrectly stopping at the first NUL character. See GH-12592.
. The str_getcsv() function now throws ValueErrors when the $separator and
$enclosure arguments are not one byte long, or if the $escape is not one
byte long or the empty string. This aligns the behaviour to be identical
to that of fputcsv() and fgetcsv().
. php_uname() now throws ValueErrors on invalid inputs.
. The "allowed_classes" option for unserialize() now throws TypeErrors and
ValueErrors if it is not an array of class names.
. http_build_query() now correctly handles backed enums.
. stream_bucket_make_writeable() and stream_bucket_new() will now return a
StreamBucket instance instead of an instance of stdClass.
Expand All @@ -241,26 +269,6 @@ PHP 8.4 UPGRADE NOTES
Passing an empty string to disable the handler is still allowed,
but deprecated.

- XMLReader:
. Passing an invalid character encoding to XMLReader::open() or
XMLReader::XML() now throws a ValueError. Passing a string containing NULL
bytes previously emitted a warning and now throws a ValueError as well.
. The class constants are typed now.

- XMLWriter:
. Passing a string containing NULL bytes previously emitted a warning and
now throws a ValueError.

- XSL:
. XSLTProcessor::setParameter() will now throw a ValueError when its arguments
contain null bytes. This never actually worked correctly in the first place,
which is why it throws an exception nowadays.
. Failure to call a PHP function callback during evaluation now throws
instead of emitting a warning.
RFC: https://wiki.php.net/rfc/improve_callbacks_dom_and_xsl
. Calling XSLTProcessor::importStyleSheet() with a non-XML object now throws
a TypeError instead of a ValueError.

========================================
2. New Features
========================================
Expand Down Expand Up @@ -615,34 +623,15 @@ PHP 8.4 UPGRADE NOTES
. trigger_error() and user_error() now have a return type of true instead of
bool.

- Curl:
. curl_multi_select throws a ValueError if the timeout argument if it's negative
or greater than PHP_INT_MAX.

- DOM:
. DOMDocument::registerNodeClass() now has a tentative return type of true.
Previously, the return type was bool but only true could be returned in practice.

- GD:
. imagejpeg/imagewebp/imagepng/imageavif throws an exception if an invalid
quality parameter value is passed. In addition, imageavif will throw an exception
if an invalid speed parameter value is passed.
. imagescale throws an exception if the width/height argument underflows/overflows or
if the mode argument is invalid.
imagefilter with IMG_FILTER_SCATTER throws an exception if the sub/plus arguments
underflows/overflows.

- Gettext:
. bind_textdomain_codeset, textdomain and d(*)gettext functions now throw an exception
if the domain argument is empty.

- Hash:
. Changed the return type of hash_update() to true. It was already the case that only
true could be returned, but the stub was not updated yet.

- Intl:
. IntlDateFormatter::__construct() throws a ValueError if the locale is invalid.
. NumberFormatter::__construct() throws a ValueError if the locale is invalid.
. NumberFormatter::ROUND_TOWARD_ZERO and NumberFormatter::ROUND_AWAY_FROM_ZERO
have been added as aliases for NumberFormatter::ROUND_DOWN and
NumberFormatter::ROUND_UP to be consistent with the new PHP_ROUND_* modes.
Expand Down