PHP 7.3 UPGRADE NOTES 1. Backward Incompatible Changes 2. New Features 3. Changes in SAPI modules 4. Deprecated Functionality 5. Changed Functions 6. New Functions 7. New Classes and Interfaces 8. Removed Extensions and SAPIs 9. Other Changes to Extensions 10. New Global Constants 11. Changes to INI File Handling 12. Windows Support 13. Other Changes ======================================== 1. Backward Incompatible Changes ======================================== Core: . The ext_skel utility has been completely redesigned with new options and some old options removed. This is now written in PHP and has no external dependencies. . Support for BeOS has been dropped. . Exceptions thrown due to automatic conversion of warnings into exceptions in EH_THROW mode (e.g. some DateTime exceptions) no longer populate error_get_last() state. As such, they now work the same way as manually thrown exceptions. . TypeError now reports wrong types as `int` and `bool` instead of `integer` and `boolean`. . Due to the introduction of flexible heredoc/nowdoc syntax (see New Features section), doc strings that contain the ending label inside their body may cause syntax errors or change in interpretation. For example in $str = <<= 56. ======================================== 5. Changed Functions ======================================== JSON: . A new flag has been added, JSON_THROW_ON_ERROR, which can be used with json_decode() or json_encode() and causes these functions to throw a JsonException upon an error, instead of setting the global error state that is retrieved with json_last_error(). JSON_PARTIAL_OUTPUT_ON_ERROR takes precedence over JSON_THROW_ON_ERROR. (RFC: https://wiki.php.net/rfc/json_throw_on_error) Standard: . debug_zval_dump() was changed to display recursive arrays and objects in the same way as var_dump(). Now, it doesn't display them twice. . array_push() and array_unshift() can now also be called with a single argument, which is particularly convenient wrt. the spread operator. PCRE: . preg_quote() now also escapes the '#' character. ======================================== 6. New Functions ======================================== Core: . Added monotonic timer function hrtime([bool get_as_num]). It returns an array of the form [seconds, nanoseconds] with the timestamp starting at an unspecified point in the past. If the optional argument is passed as true, the return value is an integer on 64-bit systems or float on 32-bit systems, representing the nanoseconds. The timestamp is not adjustable and is not related to wall clock or time of day. The timers are available under Linux, FreeBSD, Windows, Mac, SunOS, AIX and their derivatives. If no required timers are provided by a corresponding platform, the function returns false. Date: . Added the DateTime::createFromImmutable() method, which mirrors DateTimeImmutable::createFromMutable(). GMP: . Added gmp_binomial(n, k) for calculating binomial coefficients. . Added gmp_lcm(a, b) for calculating the least common multiple. . Added gmp_perfect_power(a) to check if number is a perfect power. . Added gmp_kronecker(a, b) to compute the Kronecker symbol. Intl: . Added void Spoofchecker::setRestrictionLevel(int $level) method, available when linked with ICU >= 58.1. Levels are represented as class constants - Spoofchecker::ASCII - Spoofchecker::HIGHLY_RESTRICTIVE - Spoofchecker::MODERATELY_RESTRICTIVE - Spoofchecker::MINIMALLY_RESTRICTIVE - Spoofchecker::UNRESTRICTIVE - Spoofchecker::SINGLE_SCRIPT_RESTRICTIVE For the detailed documentation on the restriction levels, see URestrictionLevel under http://icu-project.org/apiref/icu4c/uspoof_8h.html . Added Normalizer::getRawDecomposition() and normalizer_get_raw_decomposition(), to retrieve the Decomposition_Mapping property of a character. OpenSSL: . Added openssl_pkey_derive that derives a shared secret for DH, ECDH and possibly other future algorithms supported by EVP_PKEY_derive. Sockets: . Added functions to import/export the WSAPROTOCOL_INFO info struct. This implementation complements the already supported SCM_RIGHTS as in man 3 cmsg and is Windows specific. For the import/export, the default system securities apply for the SHM reading/writing. The socket becomes invalid, when the last reference to it is closed. - socket_wsaprotocol_info_export(resource $sock, int $pid) - exports the WSAPROTOCOL_INFO structure into shared memory and returns an identifier to be used for the import, or false on failure. The exported ID is only valid for the dedicated PID. - socket_wsaprotocol_info_import(string $id) - returns a duplicated socket as per the passed identifier, or false on failure. - socket_wsaprotocol_info_release(string $id) - releases the shared memory corresponding to the passed identifier. Standard: . Added is_countable() function, to check whether a value may be passed to count(). (RFC: https://wiki.php.net/rfc/is-countable) ======================================== 7. New Classes and Interfaces ======================================== JSON: . JsonException ======================================== 8. Removed Extensions and SAPIs ======================================== ======================================== 9. Other Changes to Extensions ======================================== Curl: . libcurl >= 7.15.5 is now required. Filter: . FILTER_VALIDATE_FLOAT now also supports a `thousand` option, which defines the set of allowed thousand separator chars. The default (`"',."`) is fully backward compatible with former PHP versions. FTP: . Set default transfer mode to binary Intl: . Normalizer::NONE is deprecated, when PHP is linked with ICU >= 56 . Introduced Normalizer::FORM_KC_CF as Normalizer::normalize() argument for NFKC_Casefold normalization, available when linked with ICU >= 56 MBString: . The configuration option --with-libmbfl is no longer available. ODBC: . Support for ODBCRouter has been removed. . Support for Birdstep has been removed. ZIP: . Bundled libzip has been dropped, system library is now required. ======================================== 10. New Global Constants ======================================== Curl: . CURLOPT_REQUEST_TARGET JSON: . JSON_THROW_ON_ERROR PGSQL: . Requires Postgres 9.3 - PGSQL_DIAG_SCHEMA_NAME - PGSQL_DIAG_TABLE_NAME - PGSQL_DIAG_COLUMN_NAME - PGSQL_DIAG_DATATYPE_NAME - PGSQL_DIAG_CONSTRAINT_NAME . Requires Postgres 9.6 - PGSQL_DIAG_SEVERITY_NONLOCALIZED ======================================== 11. Changes to INI File Handling ======================================== - birdstep.max_links . This INI directive has been removed. - opcache.inherited_hack . This INI directive has been removed. The value has already been ignored since PHP 5.3.0. ======================================== 12. Windows Support ======================================== - Core . File descriptors are opened in shared read/write/delete mode by default. This effectively maps the UNIX semantics and allows to delete files with handles in use. It is not 100% same, some platform differences still persist. After the deletion, the filename entry is blocked, until all the opened handles to it are closed. ======================================== 13. Other Changes ========================================