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
+
+
+ "array" and "callable" 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.
+
+
+
+
+
+
+ #[\DelayedTargetValidation] 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.
+
+
+
+
+
+
+ #[\Override] 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_getinfooption 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
+
+
+
+
+