diff --git a/appendices/migration85.xml b/appendices/migration85.xml new file mode 100644 index 000000000000..9de7f6d2ae10 --- /dev/null +++ b/appendices/migration85.xml @@ -0,0 +1,57 @@ + + + Migrating from PHP 8.4.x to PHP 8.5.x + + + This new minor version brings with it a number of + new features and a + few incompatibilities + that should be tested for before switching PHP versions in production + environments. + + + + &manual.migration.seealso; + 7.1.x, + 7.2.x, + 7.3.x, + 7.4.x, + 8.0.x, + 8.1.x, + 8.2.x. + 8.3.x. + 8.4.x. + + + &appendices.migration85.new-features; + &appendices.migration85.new-classes; + &appendices.migration85.new-functions; + &appendices.migration85.constants; + &appendices.migration85.incompatible; + + + + diff --git a/appendices/migration85/constants.xml b/appendices/migration85/constants.xml new file mode 100644 index 000000000000..76a47c83f314 --- /dev/null +++ b/appendices/migration85/constants.xml @@ -0,0 +1,180 @@ + + + New Global Constants + + + Core + + + + PHP_BUILD_DATE + + + PHP_BUILD_PROVIDER + + + + + + cURL + + + + CURLINFO_USED_PROXY + + + CURLINFO_HTTPAUTH_USED + + + CURLINFO_PROXYAUTH_USED + + + CURLINFO_CONN_ID + + + CURLINFO_QUEUE_TIME_T + + + CURLOPT_INFILESIZE_LARGE + + + CURLFOLLOW_ALL + + + CURLFOLLOW_OBEYCODE + + + CURLFOLLOW_FIRSTONLY + + + + + + Intl + + + + DECIMAL_COMPACT_SHORT + + + DECIMAL_COMPACT_LONG + + + + + + OpenSSL + + + OPENSSL_PKCS1_PSS_PADDING + PKCS7_NOSMIMECAP + PKCS7_CRLFEOL + PKCS7_NOCRL + PKCS7_NO_DUAL_CONTENT + + + + + POSIX + + + POSIX_SC_OPEN_MAX + + + + + Sockets + + + + IPPROTO_ICMP + + + IPPROTO_ICMPV6 + + + TCP_FUNCTION_BLK (FreeBSD only) + + + TCP_FUNCTION_ALIAS (FreeBSD only) + + + TCP_REUSPORT_LB_NUMA (FreeBSD only) + + + TCP_REUSPORT_LB_NUMA_NODOM (FreeBSD only) + + + TCP_REUSPORT_LB_NUMA_CURDOM (FreeBSD only) + + + TCP_BBR_ALGORITHM (FreeBSD only) + + + AF_PACKET (Linux only) + + + IP_BINDANY (FreeBSD/NetBSD/OpenBSD only) + + + SO_BUSY_POLL (Linux only) + + + UDP_SEGMENT (Linux only) + + + SHUT_RD + + + SHUT_WR + + + SHUT_RDWR + + + + + + Tokenizer + + + T_VOID_CAST + + + T_PIPE + + + + + + Standard + + + + IMAGETYPE_SVG + when libxml is loaded. + + + + + + diff --git a/appendices/migration85/incompatible.xml b/appendices/migration85/incompatible.xml new file mode 100644 index 000000000000..89ada23ff770 --- /dev/null +++ b/appendices/migration85/incompatible.xml @@ -0,0 +1,55 @@ + + + Backward Incompatible Changes + + + PHP Core + + + <literal>"array"</literal> and <literal>"callable"</literal> alias name + + + It is no longer possible to use "array" + and "callable" as class alias names + in class_alias + + + + + + Loosely comparing uncomparable objects + + + Loosely comparing uncomparable objects (e.g. enums, \CurlHandle and other + internal classes) to booleans was previously inconsistent. If compared to a + boolean literal $object == true, it would behave the same way as (bool) + $object. If compared to a statically unknown value $object == $true, it + would always return false. This behavior was consolidated to always follow + the behavior of (bool) $object. + + + + + + + + diff --git a/appendices/migration85/new-classes.xml b/appendices/migration85/new-classes.xml new file mode 100644 index 000000000000..a0f50aefa416 --- /dev/null +++ b/appendices/migration85/new-classes.xml @@ -0,0 +1,58 @@ + + + New Classes and Interfaces + + + Core + + NoDiscard + DelayedTargetValidation + + + + + + + Curl + + CurlSharePersistentHandle + + + + + + URI + + Uri\UriException + Uri\InvalidUriException + Uri\UriComparisonMode + Uri\Rfc3986\Uri + Uri\WhatWg\InvalidUrlException + Uri\WhatWg\UrlValidationErrorType + Uri\WhatWg\UrlValidationError + Uri\WhatWg\Url + + + + + + diff --git a/appendices/migration85/new-features.xml b/appendices/migration85/new-features.xml new file mode 100644 index 000000000000..3b772614650b --- /dev/null +++ b/appendices/migration85/new-features.xml @@ -0,0 +1,438 @@ + + + New Features + + + PHP Core + + + Pipe Operator + + + Added the pipe (|>) operator. + + + + + + strlen(...); +print $result . PHP_EOL; // Prints "11" +]]> + + + + + + Closure in constant expressions + + + Added support for Closures and first class callables in constant + expressions. This includes: + + + Attribute parameters. + Default values of properties and parameters. + Constants and Class Constants. + + + + + + + + + #[\NoDiscard] attribute + + + Added the #[\NoDiscard] attribute to indicate that a function's return + value is important and should be consumed. + + + + + Also, added the (void) cast to indicate that not using a value is intentional. + The (void) cast has no effect on the program's execution by itself, but + it can be used to suppress warnings emitted by #[\NoDiscard] and possibly + also diagnostics emitted by external IDEs or static analysis tools. + + + + + + + + + + + + + Attributes on Constants + + + Added support for attributes on compile-time non-class constants. + + + + + The Deprecated attribute can now be used on constants. + + + + + + + <code>#[\DelayedTargetValidation]</code> attribute + + + The new #[\DelayedTargetValidation] attribute can be used to suppress + compile-time errors from core (or extension) attributes that are used on + invalid targets. These errors are instead reported at runtime if and when + ReflectionAttribute::newInstance is called. + + + + + + + <code>#[\Override]</code> for properties + + + Override attribute can now be applied to properties. + + + + + + + Static Asymmetric Visibility + + + Added asymmetric visibility support for static properties. + + + + + + + Backtraces for Fatal Errors + + + Fatal Errors (such as an exceeded maximum execution time) now include a + backtrace. + + + + + + + Final property promotion + + + Constructor property promotion can now be used for final properties. + + + + + + + Casts in constant expressions + + + Added support for casts in constant expressions. + + + + + + + + + + + + + + cURL + + + Added support for share handles that are persisted across multiple PHP + requests, safely allowing for more effective connection reuse. + + + + + Added support for CURLINFO_USED_PROXY (libcurl >= 8.7.0), + CURLINFO_HTTPAUTH_USED, + and CURLINFO_PROXYAUTH_USED (libcurl >= 8.12.0) + to the curl_getinfo function. + When curl_getinfo returns an array, the same information + is available as "used_proxy", + "httpauth_used", and "proxyauth_used" + keys. + CURLINFO_USED_PROXY gets zero set if no proxy was used in the + previous transfer or a non-zero value if a proxy was used. + CURLINFO_HTTPAUTH_USED and + CURLINFO_PROXYAUTH_USED get bitmasks + indicating the HTTP and proxy authentication methods that were + used in the previous request. See CURLAUTH_* + constants for possible values. + + + + Added CURLOPT_INFILESIZE_LARGE Curl option, which is a safe + replacement for CURLOPT_INFILESIZE. On certain systems, + CURLOPT_INFILESIZE only accepts a 32-bit signed integer as the file + size (2.0 GiB) even on 64-bit systems. CURLOPT_INFILESIZE_LARGE + accepts the largest integer value the system can handle. + + + + Added CURLFOLLOW_OBEYCODE, CURLFOLLOW_FIRSTONLY + and CURLFOLLOW_ALL values for CURLOPT_FOLLOWLOCATION + curl_setopt option. + CURLFOLLOW_OBEYCODE to follow more strictly in regard to redirect + if they are allowed. CURLFOLLOW_FIRSTONLY to follow only the + first redirect thus if there is any follow up redirect, it won't go + any further. CURLFOLLOW_ALL is equivalent to setting + CURLOPT_FOLLOWLOCATION to true. + + + + Added support for CURLINFO_CONN_ID (libcurl >= 8.2.0) + to the curl_getinfo function. This constant allows retrieving + the unique ID of the connection used by a cURL transfer. It is primarily + useful when connection reuse or connection pooling logic is needed in + PHP-level applications. When curl_getinfo returns an array, + this value is available as the "conn_id" key. + + + + Added support for CURLINFO_CONN_ID (libcurl >= 8.2.0) + to the curl_getinfo. + + + + Added support for CURLINFO_QUEUE_TIME_T (libcurl >= 8.6.0) + to the curl_getinfo function. This constant allows + retrieving the time (in microseconds) that the request spent in libcurl’s + connection queue before it was sent. + This value can also be retrieved by passing CURLINFO_QUEUE_TIME_T to the + curl_getinfo option parameter. + + + + Added support for CURLOPT_SSL_SIGNATURE_ALGORITHMS to + specify the signature algorithms to use for TLS. + + + + + + DOM + + + Added Dom\Element::$outerHTML. + + + + Added $children property to Dom\ParentNode implementations. + + + + + + EXIF + + + Added OffsetTime* Exif tags. + + + + Added support for HEIF/HEIC. + + + + + + Intl + + + Added class constants NumberFormatter::CURRENCY_ISO, + NumberFormatter::CURRENCY_PLURAL, NumberFormatter::CASH_CURRENCY, + and NumberFormatter::CURRENCY_STANDARD for various currency-related + number formats. + + + + Added Locale::addLikelySubtags and Locale::minimizeSubtags to + handle likely tags on a given locale. + + + + Added IntlListFormatter class to format, order, and punctuate + a list of items with a given locale, IntlListFormatter::TYPE_AND, + IntlListFormatter::TYPE_OR, IntlListFormatter::TYPE_UNITS operands and + IntlListFormatter::WIDTH_WIDE, IntlListFormatter::WIDTH_SHORT and + IntlListFormatter::WIDTH_NARROW widths. + It is supported from icu 67. + + + + + + PDO_Sqlite + + + Added class constant Pdo_Sqlite::ATTR_BUSY_STATEMENT. + + + + Added class constants Pdo_Sqlite::ATTR_EXPLAIN_STATEMENT, + Pdo_Sqlite::EXPLAIN_MODE_PREPARED, Pdo_Sqlite::EXPLAIN_MODE_EXPLAIN, + Pdo_Sqlite::EXPLAIN_MODE_EXPLAIN_QUERY_PLAN. + + + + Added PDO\Sqlite::ATTR_TRANSACTION_MODE connection attribute with + possible values PDO\Sqlite::TRANSACTION_MODE_DEFERRED, + PDO\Sqlite::TRANSACTION_MODE_IMMEDIATE, + and PDO\Sqlite::TRANSACTION_MODE_EXCLUSIVE, allowing to configure + the transaction mode to use when calling beginTransaction(). + + + + + + Session + + + session_set_cookie_params, + session_get_cookie_params, and session_start + now support partitioned cookies via the "partitioned" key. + + + + + + + SOAP + + + Enumeration cases are now dumped in __getTypes(). + + + + support for Soap 1.2 Reason Text xml:lang attribute. + + + + The signature of SoapFault::__construct and + SoapServer::fault therefore + now have an optional $lang parameter. + This support solves compatibility with .NET SOAP clients. + + + + + + Standard + + + mail now returns the actual sendmail error and detects if the sendmail + process was terminated unexpectedly. In such cases, a warning is emitted + and the function returns false. Previously, these errors were silently + ignored. This change affects only the sendmail transport. + + + + getimagesize now supports HEIF/HEIC images. + + + + getimagesize now supports SVG images when ext-libxml is also loaded. + Similarly, image_type_to_extension and + image_type_to_mime_type + now also handle IMAGETYPE_SVG. + + + + The array returned by getimagesize now has two additional entries: + "width_unit" and "height_unit" to indicate in which units the dimensions + are expressed. These units are px by default. They are not necessarily + the same (just to give one example: one may be cm and the other may be px). + + + + setcookie and setrawcookie now support the "partitioned" key. + + + + + + + XSL + + + The $namespace argument of XSLTProcessor::getParameter, + XSLTProcessor::setParameter and XSLTProcessor::removeParameter + now actually works instead of being treated as empty. + This only works if the $name argument does not use Clark notation + and is not a QName because in those cases the namespace is taken + from the namespace href or prefix respectively. + + + + + + Zlib + + + flock is now supported on zlib streams. Previously, this always + failed to perform any locking action. + + + + + + diff --git a/appendices/migration85/new-functions.xml b/appendices/migration85/new-functions.xml new file mode 100644 index 000000000000..f0b925767eeb --- /dev/null +++ b/appendices/migration85/new-functions.xml @@ -0,0 +1,151 @@ + + + New Functions + + + Core + + + + + get_error_handler + get_exception_handler + + Closure::getCurrent + + + + + + Curl + + + + curl_multi_get_handles + curl_multi_add_handle + curl_share_init_persistent + + + + + DOM + + + Dom\Element::getElementsByClassName + + + Dom\Element::insertAdjacentHTML + + + + + + Enchant + + enchant_dict_remove_from_session + enchant_dict_remove + + + + + Intl + + + Locale::isRightToLeft + + locale_is_right_to_left + + grapheme_levenshtein + + + + + Opcache + + + opcache_is_script_cached_in_file_cache + + + + + PDO_SQLITE + + + Pdo\Sqlite::setAuthorizer + + + + + + PGSQL + + + pg_close_stmt + pg_service + + + + + Reflection + + + + ReflectionConstant::getFileName + + + ReflectionConstant::getExtension + + + ReflectionConstant::getExtensionName + + + + ReflectionConstant::getAttributes + + + ReflectionProperty::getMangledName + + + + + + Sqlite + + + + Sqlite3Stmt::busy + + + + + + Standard + + + + array_first + array_last + + + + +