Deprecated Features

PHP Core

Implicitly nullable parameter

A parameter's type is implicitly widened to accept null if the default value for it is null.

The following code:

<?php
function foo(T1 $a = null) {}
should be converted to:
<?php
function foo(T1|null $a = null) {}
or
<?php
function foo(?T1 $a = null) {}

However, if such a parameter declaration is followed by a mandatory parameter:

<?php
function foo(T1 $a, T2 $b = null, T3 $c) {}
It must be converted to:
<?php
function foo(T1 $a, T2|null $b, T3 $c) {}
or
<?php
function foo(T1 $a, ?T2 $b, T3 $c) {}
as optional parameter before required ones are deprecated.

Raising zero to the power of negative number

Raising a number to the power of a negative number is equivalent to taking the reciprocal of the number raised to the positive opposite of the power. Therefore raising 0 to the power of a negative number corresponds to dividing by 0. Thus, this behaviour has been deprecated.

This affects the exponentiation operator ** and the pow function.

If the IEEE 754 semantics are desired one should use the new fpow function.

Using underscore _ as class name

Naming a class _ is now deprecated:

<?php
class _ {}

Note:

Classes whose names start with an underscore are not deprecated:

<?php
class _MyClass {}

Using trigger_error with E_USER_ERROR

Calling trigger_error with error_level being equal to E_USER_ERROR is now deprecated.

Such usages should be replaced by either throwing an exception, or calling exit, whichever is more appropriate.

The E_STRICT constant

Because the E_STRICT error level was removed, this constant is now deprecated.

cURL

The CURLOPT_BINARYTRANSFER constant is now deprecated.

Date

The DatePeriod::__construct(string $isostr, int $options = 0) signature has been deprecated. Use DatePeriod::createFromISO8601String instead.

The SUNFUNCS_RET_TIMESTAMP, SUNFUNCS_RET_STRING, and SUNFUNCS_RET_DOUBLE constants are now deprecated. This follows from the deprecation of the date_sunset and date_sunrise functions in PHP 8.1.0.

DBA

Passing null or false to dba_key_split is now deprecated. It would always return false in those cases.

DOM

The DOM_PHP_ERR constant is now deprecated.

The following properties have been formally deprecated:

  • DOMDocument::$actualEncoding
  • DOMDocument::$config
  • DOMEntity::$actualEncoding
  • DOMEntity::$encoding
  • DOMEntity::$version

Hash

Passing invalid options to hash functions is now deprecated.

Intl

Calling intlcal_set or IntlCalendar::set with more than two arguments is deprecated. Use either IntlCalendar::setDate or IntlCalendar::setDateTime instead.

Calling intlgregcal_create_instance or IntlGregorianCalendar::__construct with more than two arguments is deprecated. Use either IntlGregorianCalendar::createFromDate or IntlGregorianCalendar::createFromDateTime instead.

LDAP

Calling ldap_connect with more than two arguments is deprecated. Use ldap_connect_wallet instead.

Calling ldap_exop with more than four arguments is deprecated. Use ldap_exop_sync instead.

MySQLi

The mysqli_ping function and mysqli::ping method are now deprecated as the reconnect feature was removed in PHP 8.2.0.

The mysqli_kill function and mysqli::kill method are now deprecated. If this functionality is needed a SQL KILL command can be used instead.

The mysqli_refresh function and mysqli::refresh method are now deprecated. If this functionality is needed a SQL FLUSH command can be used instead. All MYSQLI_REFRESH_* constants have been deprecated as well.

Passing the mode parameter to mysqli_store_result explicitly has been deprecated. As the MYSQLI_STORE_RESULT_COPY_DATA constant was only used in conjunction with this function it has also been deprecated.

PDO_PGSQL

Using escaped question marks (??) inside dollar-quoted strings is deprecated. Because PDO_PGSQL now has its own SQL parser with dollar-quoted strings support, it is no longer necessary to escape question marks inside them.

PGSQL

The 2 arguments signature of pg_fetch_result, pg_field_prtlen, and pg_field_is_null is now deprecated. Use the 3 arguments signature with row set to null instead.

Random

lcg_value is now deprecated, as the function is broken in multiple ways. Use Random\Randomizer::getFloat instead.

Reflection

Calling ReflectionMethod::__construct with one arguments is deprecated. Use ReflectionMethod::createFromMethodName instead.

Session

Calling session_set_save_handler with more than two arguments is deprecated. Use the two arguments signature instead.

Changing the value of the session.sid_length and session.sid_bits_per_character INI settings is deprecated. Update the session storage backend to accept 32 character hexadecimal session IDs and stop changing these two INI settings instead.

Changing the value of the session.use_only_cookies, session.use_trans_sid, session.trans_sid_tags, session.trans_sid_hosts, and session.referer_check INI settings is deprecated. The SID constant is also deprecated.

SOAP

Passing an int to SoapServer::addFunction is now deprecated. If all PHP functions need to be provided flatten the array returned by get_defined_functions.

The SOAP_FUNCTIONS_ALL constant is now deprecated.

SPL

The SplFixedArray::__wakeup method is now deprecated, as it implements SplFixedArray::__serialize and SplFixedArray::__unserialize which need to be overwritten instead.

Using the default value for the escape parameter for the SplFileObject::setCsvControl, SplFileObject::fputcsv, and SplFileObject::fgetcsv is now deprecated. It must be passed explicitly either positionally or via named arguments. This does not apply to SplFileObject::fputcsv and SplFileObject::fgetcsv if SplFileObject::setCsvControl was used to set a new default value.

Standard

Calling stream_context_set_option with two arguments is deprecated. Use stream_context_set_options instead.

Unserializing strings using the uppercase S tag with unserialize is deprecated.

Using the default value for the escape parameter for the fputcsv, fgetcsv, and str_getcsv is now deprecated. It must be passed explicitly either positionally or via named arguments.

XML

The xml_set_object function has been deprecated.

Passing non-callable strings to the xml_set_* functions is now deprecated.