Skip to content

PHP 8.5 documentation tracker #4886

@DanielEScherzer

Description

@DanielEScherzer

Pages which need to be added/modified for complete documentation of PHP 8.5:

Note

This issue is still a Work In Progress

Important

Priority should be given to documenting Core language and ext/standard behavioral changes

Core

Backward Incompatible Changes

  • It is no longer possible to use "array" and "callable" as class alias names in class_alias().
  • 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.
  • The return value of gc_collect_cycles() no longer includes strings and resources that were indirectly collected through cycles.
  • It is now allowed to substitute static with self or the concrete class name in final subclasses.
  • The tick handlers are now deactivated after all shutdown functions, destructors have run and the output handlers have been cleaned up. This is a consequence of fixing NULL-ptr dereference when using register_tick_function in destructor php-src#18033.
  • Traits are now bound before the parent class. This is a subtle behavioral change, but should more closely match user expectations, demonstrated by Strange behavior of ReflectionClass::getProperty with trait and inheritance php-src#15753 and Collision of interface constant and trait constant should not produce fatal error php-src#16198.
  • Errors emitted during compilation and class linking are now always delayed and handled after compilation or class linking. Fatal errors emitted during compilation or class linking cause any delayed errors to be handled immediately, without calling user-defined error handlers.
  • Exceptions thrown by user-defined error handlers when handling class linking errors are not promoted to fatal errors anymore and do not prevent linking.
  • Applying #[\Attribute] to an abstract class, enum, interface, or trait triggers an error during compilation. Previously, the attribute could be added, but when ReflectionAttribute::newInstance() was called an error would be thrown. The error can be delayed from compilation to runtime using the new #[\DelayedTargetValidation] attribute.
  • The disable_classes INI setting has been removed as it causes various engine assumptions to be broken. RFC: https://wiki.php.net/rfc/deprecations_php_8_5#remove_disable_classes_ini_setting
  • Destructing non-array values (other than NULL) using [] or list() now emits a warning. RFC: https://wiki.php.net/rfc/warnings-php-8-5#destructuring_non-array_values
  • A warning is now emitted when casting floats (or strings that look like floats) to int if they cannot be represented as one. This affects explicit int casts and implicit int casts. RFC: https://wiki.php.net/rfc/warnings-php-8-5#casting_out_of_range_floats_to_int
  • A warning is now emitted when casting NAN to other types. RFC: https://wiki.php.net/rfc/warnings-php-8-5#coercing_nan_to_other_types

Deprecations

INI changes

  • Added fatal_error_backtraces to control whether fatal errors should include a backtrace. RFC: https://wiki.php.net/rfc/error_backtraces_v2
  • Added startup-only max_memory_limit INI setting to control the maximum memory_limit that may be configured at startup or runtime. Exceeding this value emits a warning, unless set to -1, and sets memory_limit to the current max_memory_limit instead. ML discussion: https://externals.io/message/127108

New classes

New functions

New global constants

  • PHP_BUILD_DATE.
  • PHP_BUILD_PROVIDER.

New features

Other changes

  • The high resolution timer (hrtime()) on macOS now uses the recommended clock_gettime_nsec_np(CLOCK_UPTIME_RAW) API instead of mach_absolute_time().

New warnings and exceptions

BZ2

  • bzcompress() now throws a ValueError when $block_size is not between 1 and 9.
  • bzcompress() now throws a ValueError when $work_factor is not between 0 and 250.

FileInfo:

  • finfo_file() and finfo::file() now throws a ValueError instead of a TypeError when $filename contains nul bytes. This aligns the type of Error thrown to be consistent with the rest of the language.

Intl

  • IntlDateFormatter::setTimeZone()/datefmt_set_timezone() throws an IntlException on uninitialised classes/clone failures.
  • Locale:: methods throw a ValueError when locale inputs contain null bytes.

LDAP:

  • ldap_get_option() and ldap_set_option() now throw a ValueError when passing an invalid option.

MySQLi:

  • Calling the mysqli constructor on an already-constructed object is now no longer possible and throws an Error.

PCNTL:

  • pcntl_exec() now throws ValueErrors when entries of the $args parameter contain null bytes.
  • pcntl_exec() now throws ValueErrors when entries or keys of the $env_vars parameter contain null bytes.

PDO

  • Attempting to call PDOStatement::setFetchMode during a call to PDO::fetch(), PDO::fetchObject(), PDO::fetchAll(), for example using tricks such as passing the statement object as a constructor argument when fetching into an object, will now throw an Error.
  • A ValueError is now thrown if PDO::FETCH_PROPS_LATE is used with a fetch mode different than PDO::FETCH_CLASS, consistent with other fetch flags.
  • A ValueError is now thrown if PDO::FETCH_INTO is used as a fetch mode in PDO::fetchAll(), similar to PDO::FETCH_LAZY.

PDO_FIREBIRD

  • A ValueError is now thrown when trying to set a cursor name that is too long on a PDOStatement resulting from the Firebird driver.

PDO_SQLITE:

  • SQLite PDO::quote() will now throw an exception or emit a warning, depending on the error mode, if the string contains a null byte.
  • PDO::sqliteCreateCollation will now throw an exception if the callback has the wrong return type, making it more in line with Pdo_Sqlite::createCollation behavior.

POSIX

  • posix_isatty raises an E_WARNING message when encountering an invalid file descriptor.
  • posix_fpathconf checks invalid file descriptors and sets last_error to EBADF and raises an E_WARNING message.
  • posix_kill throws a ValueError when the process_id argument is lower or greater than what supports the platform (signed integer or long range), posix_setpgid throws a ValueError when the process_id or the process_group_id is lower than zero or greater than what supports the platform.
  • posix_setrlimit throws a ValueError when the hard_limit of soft_limit argument are lower than -1 or if soft_limit is greater than hard_limit.

Session

  • Attempting to write session data where $_SESSION has a key containing the pipe character will now emit a warning instead of silently failing.
  • session_start is stricter in regard to the option argument. It throws a ValueError if the whole is not a hashmap or a TypeError if read_and_close value is not a valid type compatible with int.

SimpleXML

  • Passing an XPath expression that returns something other than a node set to SimpleXMLElement::xpath() will now emit a warning and return false, instead of silently failing and returning an empty array.

SNMP

  • snmpget, snmpset, snmp_get2, snmp_set2, snmp_get3, snmp_set3 and SNMP::__construct() throw a ValueError when the hostname is too large, contains any null byte or if the port is given when negative or greater than 65535, timeout and retries values are lower than -1 or too large.

Sockets

  • socket_create_listen, socket_bind and socket_sendto throw a ValueError if the port is lower than 0 or greater than 65535, and also if any of the hints array entries are indexed numerically.
  • socket_addrinfo_lookup throws a TypeError if any of the hints values cannot be cast to int and can throw a ValueError if any of these values overflow.
  • socket_set_option with MCAST_LEAVE_GROUP/MCAST_LEAVE_SOURCE_GROUP options will throw an exception if the value isn't a valid object or array.
  • socket_set_option with multicast context throws a ValueError when the created socket is not of AF_INET/AF_INET6 family.

Tidy

  • tidy::__construct/parseFile/parseString now throws a ValueError if the configuration contains an invalid or set a read-only internal entry, a TypeError contains, at least, one element when the key is not a string.

New extensions

Lexbor

  • An always enabled lexbor extension is added. It contains the lexbor library that was separated from ext/dom for being reused among other extensions. The new extension is not directly exposed to userland.

URI

  • An always enabled uri extension is added that can be used for handling URIs and URLs according to RFC 3986 and WHATWG URL. RFC: https://wiki.php.net/rfc/url_parsing_api
  • New classes
    • Uri\UriException
    • Uri\InvalidUriException
    • Uri\UriComparisonMode
    • Uri\Rfc3986\Uri
    • Uri\WhatWg\InvalidUrlException
    • Uri\WhatWg\UrlValidationErrorType
    • Uri\WhatWg\UrlValidationError
    • Uri\WhatWg\Url

SAPI changes

CLI

  • Trying to set a process title that is too long with cli_set_process_title() will now fail instead of silently truncating the given title.
  • Added a new --ini=diff option to print INI settings changed from the builtin default.

CLI/CGI

  • The -z or --zend-extension option has been removed as it was non-functional. Use -d zend_extension=<path> instead.

FPM

  • FPM with httpd ProxyPass decodes the full script path. Added fastcgi.script_path_encoded INI setting to prevent this new behavior.
  • FPM access log limit now respects log_limit value.

Extension changes

Curl

  • Deprecations
  • New classes
  • New functions
  • New global constants
    • 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.
  • Other changes
    • curl_easy_setopt with CURLOPT_FOLLOWLOCATION option's value no longer is treated as boolean but integer to handle CURLFOLLOW_OBEYCODE and CURLFOLLOW_FIRSTONLY.
    • Added support for share handles that are persisted across multiple PHP requests, safely allowing for more effective connection reuse. RFC: https://wiki.php.net/rfc/curl_share_persistence_improvement
    • 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_easy_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_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.

Date

DOM

  • BC breaks
    • Cloning a DOMNamedNodeMap, DOMNodeList, Dom\NamedNodeMap, Dom\NodeList, Dom\HTMLCollection, and Dom\DtdNamedNodeMap now fails. This never actually resulted in a working object, so the impact should actually be zero.
  • New functions
    • Added Dom\Element::getElementsByClassName().
    • Added Dom\Element::insertAdjacentHTML().
  • Other changes
    • Added Dom\Element::$outerHTML.
    • Added $children property to Dom\ParentNode implementations.

Enchant

  • New functions
    • Added enchant_dict_remove_from_session() to remove a word added to the spellcheck session via enchant_dict_add_to_session().
    • Added enchant_dict_remove() to put a word on the exclusion list and remove it from the session dictionary.

Exif

  • Other changes
    • Add OffsetTime* Exif tags.
    • Added support for HEIF/HEIC.

FileInfo

GD:

Hash

Intl

  • BC breaks
    • The extension now requires at least ICU 57.1.
    • The behaviour of Collator::SORT_REGULAR with respect to handling numeric strings is now aligned with the behaviour of SORT_REGULAR in ext/standard. This is a consequence of fixing bug [intl] Weird numeric sort in Collator php-src#18566.
  • Deprecations
  • New classes
    • 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.
  • New functions
    • Added locale_is_right_to_left/Locale::isRightToLeft, returns true if the locale is written right to left (after its enrichment with likely subtags).
    • Added grapheme_levenshtein() function. RFC: https://wiki.php.net/rfc/grapheme_levenshtein
    • Added Locale::addLikelySubtags and Locale::minimizeSubtags to handle likely tags on a given locale.
  • New class constants
    • Added class constants NumberFormatter::CURRENCY_ISO, NumberFormatter::CURRENCY_PLURAL, NumberFormatter::CASH_CURRENCY, and NumberFormatter::CURRENCY_STANDARD for various currency-related number formats.
  • New global constants
    • DECIMAL_COMPACT_SHORT.
    • DECIMAL_COMPACT_LONG.
  • Other changes
    • grapheme_extract() properly assigns $next value when skipping over invalid starting bytes. Previously there were cases where it would point to the start of the grapheme boundary instead of the end.
    • transliterator_get_error_code(), transliterator_get_error_message() TransLiterator::getErrorCode(), and TransLiterator::getErrorMessage() have dropped the false from the return type union. Returning false was actually never possible.
    • grapheme_strpos(), grapheme_stripos(), grapheme_strrpos(), grapheme_strripos(), grapheme_strstr(), grapheme_stristr() and grapheme_levenshtein() functions add $locale parameter. RFC: https://wiki.php.net/rfc/grapheme_add_locale_for_case_insensitive
    • Intl's internal error mechanism has been modernized so that it indicates more accurately which call site caused what error. Moreover, some ext/date exceptions have been wrapped inside a IntlException now.

LDAP

  • Deprecations
  • Other changes
    • ldap_get_option() now accepts a NULL connection, as ldap_set_option(), to allow retrieval of global options.

libxml

  • Other changes
    • libxml_set_external_entity_loader() now has a formal return type of true.

MBstring

  • BC breaks
    • Unicode data tables have been updated to Unicode 17.0

MySQLi

ODBC

  • BC breaks
    • ODBC now assumes that at least ODBC 3.5 functionality is available. The ODBCVER definition and build system flags to control it have been removed.
    • ODBC no longer has build flags to build against specific drivers (except for DB2) and removes special cases for those drivers. It is strongly recommended to use a driver manager like iODBC or unixODBC on non-Windows.

Opcache

  • BC breaks
    • The Opcache extension is now always built into the PHP binary and is always loaded. The INI directives opcache.enable and opcache.enable_cli are still honored. The --enable-opcache/--disable-opcache configure flags have been removed, and the build does not produce opcache.so or php_opcache.dll objects anymore. Using zend_extension=opcache.so or zend_extension=php_opcache.dll INI directives will emit a warning.
  • INI changes
    • Added opcache.file_cache_read_only to support a read-only opcache.file_cache directory, for use with read-only file systems (e.g. read-only Docker containers). Best used with opcache.validate_timestamps=0, opcache.enable_file_override=1, and opcache.file_cache_consistency_checks=0. Note: A cache generated with a different build of PHP, a different file path, or different settings (including which extensions are loaded), may be ignored.
    • The default value of opcache.jit_hot_loop is now 61 (a prime) to prevent it from being a multiple of loop iteration counts. It is recommended that this parameter is set to a prime number. Update opcache.jit_hot_loop #4685
    • Changing opcache.memory_consumption when OPcache SHM is already set up will now correctly report a failure instead of silently doing nothing and showing misleading values in PHPInfo.
  • New functions
    • Added opcache_is_script_cached_in_file_cache().
  • Other changes
    • The Opcache extension is now always built into the PHP binary and is always loaded. The INI directives opcache.enable and opcache.enable_cli are still honored.

OpenSSL

  • Deprecations
  • INI changes
    • Added openssl.libctx to select the OpenSSL library context type. Either custom libctx for each thread can be used or a single global (default) libctx is used.
  • New global constants
    • OPENSSL_PKCS1_PSS_PADDING
    • PKCS7_NOSMIMECAP
    • PKCS7_CRLFEOL
    • PKCS7_NOCRL
    • PKCS7_NO_DUAL_CONTENT
  • Other changes
    • openssl_public_encrypt() and openssl_private_decrypt() have new parameter $digest_algo that allows specifying hash digest algorithm for OEAP padding.
    • openssl_sign() and openssl_verify() have new parameter $padding to allow using more secure RSA PSS padding.
    • openssl_cms_encrypt() $cipher_algo parameter can be a string with the cipher name. That allows to use more algorithms including AES GCM cipher algorithms for auth enveloped data.

PCNTL

  • Other changes
    • pcntl_exec() now has a formal return type of false.
    • pcntl_waitid() takes an additional resource_usage argument to gather various platform specific metrics about the child process.

PCRE

PDO

List of affected constants and their replacement:
  • PDO::DBLIB_ATTR_CONNECTION_TIMEOUT => Pdo\Dblib::ATTR_CONNECTION_TIMEOUT
  • PDO::DBLIB_ATTR_QUERY_TIMEOUT => Pdo\Dblib::ATTR_QUERY_TIMEOUT
  • PDO::DBLIB_ATTR_STRINGIFY_UNIQUEIDENTIFIER => Pdo\Dblib::ATTR_STRINGIFY_UNIQUEIDENTIFIER
  • PDO::DBLIB_ATTR_VERSION => Pdo\Dblib::ATTR_VERSION
  • PDO::DBLIB_ATTR_TDS_VERSION => Pdo\Dblib::ATTR_TDS_VERSION
  • PDO::DBLIB_ATTR_SKIP_EMPTY_ROWSETS => Pdo\Dblib::ATTR_SKIP_EMPTY_ROWSETS
  • PDO::DBLIB_ATTR_DATETIME_CONVERT => Pdo\Dblib::ATTR_DATETIME_CONVERT
  • PDO::FB_ATTR_DATE_FORMAT => Pdo\Firebird::ATTR_DATE_FORMAT
  • PDO::FB_ATTR_TIME_FORMAT => Pdo\Firebird::ATTR_TIME_FORMAT
  • PDO::FB_ATTR_TIMESTAMP_FORMAT => Pdo\Firebird::ATTR_TIMESTAMP_FORMAT
  • PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => Pdo\Mysql::ATTR_USE_BUFFERED_QUERY
  • PDO::MYSQL_ATTR_LOCAL_INFILE => Pdo\Mysql::ATTR_LOCAL_INFILE
  • PDO::MYSQL_ATTR_LOCAL_INFILE_DIRECTORY => Pdo\Mysql::ATTR_LOCAL_INFILE_DIRECTORY
  • PDO::MYSQL_ATTR_INIT_COMMAND => Pdo\Mysql::ATTR_INIT_COMMAND
  • PDO::MYSQL_ATTR_MAX_BUFFER_SIZE => Pdo\Mysql::ATTR_MAX_BUFFER_SIZE
  • PDO::MYSQL_ATTR_READ_DEFAULT_FILE => Pdo\Mysql::ATTR_READ_DEFAULT_FILE
  • PDO::MYSQL_ATTR_READ_DEFAULT_GROUP => Pdo\Mysql::ATTR_READ_DEFAULT_GROUP
  • PDO::MYSQL_ATTR_COMPRESS => Pdo\Mysql::ATTR_COMPRESS
  • PDO::MYSQL_ATTR_DIRECT_QUERY => Pdo\Mysql::ATTR_DIRECT_QUERY
  • PDO::MYSQL_ATTR_FOUND_ROWS => Pdo\Mysql::ATTR_FOUND_ROWS
  • PDO::MYSQL_ATTR_IGNORE_SPACE => Pdo\Mysql::ATTR_IGNORE_SPACE
  • PDO::MYSQL_ATTR_SSL_KEY => Pdo\Mysql::ATTR_SSL_KEY
  • PDO::MYSQL_ATTR_SSL_CERT => Pdo\Mysql::ATTR_SSL_CERT
  • PDO::MYSQL_ATTR_SSL_CA => Pdo\Mysql::ATTR_SSL_CA
  • PDO::MYSQL_ATTR_SSL_CAPATH => Pdo\Mysql::ATTR_SSL_CAPATH
  • PDO::MYSQL_ATTR_SSL_CIPHER => Pdo\Mysql::ATTR_SSL_CIPHER
  • PDO::MYSQL_ATTR_SSL_VERIFY_SERVER_CERT => Pdo\Mysql::ATTR_SSL_VERIFY_SERVER_CERT
  • PDO::MYSQL_ATTR_SERVER_PUBLIC_KEY => Pdo\Mysql::ATTR_SERVER_PUBLIC_KEY
  • PDO::MYSQL_ATTR_MULTI_STATEMENTS => Pdo\Mysql::ATTR_MULTI_STATEMENTS
  • PDO::ODBC_ATTR_USE_CURSOR_LIBRARY => Pdo\Odbc::ATTR_USE_CURSOR_LIBRARY
  • PDO::ODBC_ATTR_ASSUME_UTF8 => Pdo\Odbc::ATTR_ASSUME_UTF8
  • PDO::ODBC_SQL_USE_IF_NEEDED => Pdo\Odbc::SQL_USE_IF_NEEDED
  • PDO::ODBC_SQL_USE_DRIVER => Pdo\Odbc::SQL_USE_DRIVER
  • PDO::ODBC_SQL_USE_ODBC => Pdo\Odbc::SQL_USE_ODBC
  • PDO::PGSQL_ATTR_DISABLE_PREPARES => Pdo\Pgsql::ATTR_DISABLE_PREPARES
  • PDO::SQLITE_ATTR_EXTENDED_RESULT_CODES => Pdo\Sqlite::ATTR_EXTENDED_RESULT_CODES
  • PDO::SQLITE_ATTR_OPEN_FLAGS => Pdo\Sqlite::OPEN_FLAGS
  • PDO::SQLITE_ATTR_READONLY_STATEMENT => Pdo\Sqlite::ATTR_READONLY_STATEMENT
  • PDO::SQLITE_DETERMINISTIC => Pdo\Sqlite::DETERMINISTIC
  • PDO::SQLITE_OPEN_READONLY => Pdo\Sqlite::OPEN_READONLY
  • PDO::SQLITE_OPEN_READWRITE => Pdo\Sqlite::OPEN_READWRITE
  • PDO::SQLITE_OPEN_CREATE => Pdo\Sqlite::OPEN_CREATE
List of affected methods and their replacement:
  • PDO::pgsqlCopyFromArray() => Pdo\Pgsql::copyFromArray()
  • PDO::pgsqlCopyFromFile() => Pdo\Pgsql::copyFromFile()
  • PDO::pgsqlCopyToArray() => Pdo\Pgsql::copyToArray()
  • PDO::pgsqlCopyToFile() => Pdo\Pgsql::copyToFile()
  • PDO::pgsqlGetNotify() => Pdo\Pgsql::getNotify()
  • PDO::pgsqlGetPid() => Pdo\Pgsql::getPid()
  • PDO::pgsqlLOBCreate() => Pdo\Pgsql::lobCreate()
  • PDO::pgsqlLOBOpen() => Pdo\Pgsql::lobOpen()
  • PDO::pgsqlLOBUnlink() => Pdo\Pgsql::lobUnlink()
  • PDO::sqliteCreateAggregate() => Pdo\Sqlite::createAggregate()
  • PDO::sqliteCreateCollation() => Pdo\Sqlite::createCollation()
  • PDO::sqliteCreateFunction() => Pdo\Sqlite::createFunction()

PDO_ODBC

PDO_PGSQL

  • Deprecations
  • Other changes
    • PDO::pgsqlCopyFromArray also supports inputs as Iterable.
    • Pdo\Pgsql::setAttribute and Pdo\Pgsql::prepare supports PDO::ATTR_PREFETCH sets to 0 which set to lazy fetch mode. In this mode, statements cannot be run in parallel.

PDO_SQLite

  • New functions
    • Added support for Pdo\Sqlite::setAuthorizer(), which is the equivalent of SQLite3::setAuthorizer(). The only interface difference is that the pdo version returns void.
  • New class constants
    • 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.
  • Other changes
    • Increased minimum release version support from 3.7.7 to 3.7.17.
    • 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().

PGSQL

  • New functions
    • pg_close_stmt offers an alternative way to close a prepared statement from the DEALLOCATE sql command in that we can reuse its name afterwards.
    • pg_service returns the ongoing service name of the connection.
  • Other changes
    • pg_copy_from also supports inputs as Iterable.
    • pg_connect checks if the connection_string argument contains any null byte.
    • pg_close_stmt checks if the statement_name argument contains any null byte.

POSIX

  • New global constants
    • POSIX_SC_OPEN_MAX.
  • Other changes
    • posix_ttyname sets last_error to EBADF when encountering an invalid file descriptor.

Readline

  • Other changes
    • The return types of readline_add_history(), readline_clear_history(), and readline_callback_handler_install() have been changed to true, rather than bool.

Reflection

SOAP

  • Other changes
    • Enumeration cases are now dumped in __getTypes().
    • Implemented request #61105: 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.

Sockets

  • New global constants
    • 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.
  • Other changes
    • socket_create/socket_bind can create AF_PACKET family sockets.
    • socket_getsockname gets the interface index and its string representation with AF_PACKET socket.
    • session_set_cookie_params(), session_get_cookie_params(), and session_start() now support partitioned cookies via the "partitioned" key. RFC: https://wiki.php.net/rfc/CHIPS

SPL

Sqlite

  • New functions
    • Sqlite3Stmt::busy to check if a statement had been fetched but not completely.
  • New class constants
    • Added class constants Sqlite3Stmt::EXPLAIN_MODE_PREPARED, Sqlite3Stmt::EXPLAIN_MODE_EXPLAIN and Sqlite3Stmt::EXPLAIN_MODE_EXPLAIN_QUERY_PLAN.

Standard

Tokenizer

  • New global constants
    • T_VOID_CAST.
    • T_PIPE.

XML

XSL

  • Other changes
    • 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

  • Other changes
    • The "use_include_path" argument for the gzfile, gzopen and readgzfile functions had been changed from int to boolean.
    • gzfile, gzopen and readgzfile functions now respect the default stream context.
    • flock() is now supported on zlib streams. Previously, this always failed to perform any locking action.

Windows Support

  • The configuration variables PHP_VERSION, PHP_MINOR_VERSION, and PHP_RELEASE_VERSION are now always numbers. Previously, they have been strings for buildconf builds.
  • phpize builds now reflect the source tree in the build dir (like that already worked for in-tree builds); some extension builds (especially when using Makefile.frag.w32) may need adjustments.
  • --enable-sanitizer is now supported for MSVC builds. This enables ASan and debug assertions, and is supported as of MSVC 16.10 and Windows 10.
  • The --with-uncritical-warn-choke configuration option for clang builds is no longer supported. Select warnings to suppress via CFLAGS instead.
  • COM:
    • The extension is now build shared by default; previously it defaulted to a static extension, although the official Windows binaries built a shared extension.
  • FFI:
    • It is no longer necessary to specify the library when using FFI::cdef() and FFI::load(). However, this convenience feature should not be used in production.
  • Streams:
    • If only pipe streams are contained in the $read array, and the $write and $except arrays are empty, stream_select() now behaves similar to POSIX systems, i.e. the function only returns if at least one pipe is ready to be read, or after the timeout expires. Previously, stream_select() returned immediately, reporting all streams as ready to read.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions