PHP 8.1.0 RC 4 available for testing

Deprecated Features

PHP Core

Implementing Serializable without __serialize() and __unserialize()

Either only the new methods should be implemented, if no support for PHP prior to version 7.4 is provided, or both should be implemented.

Passing null to non-nullable parameters of built-in functions

Scalar types for built-in functions are nullable by default, this behaviour is deprecated to align with the behaviour of user-defined functions, where scalar types need to be marked as nullable explicitly.

// Deprecated: Passing null to parameter #2 ($needle) of type string
//             is deprecated

Implicit incompatible Float to Integer conversions

The implicit conversion of Float to Integer which leads to a loss in precision is now deprecated. This affects Array keys, Integer type declarations in coercive mode, and operators working on Integers.

= [];
$a[15.5]; // deprecated, as key value loses the 0.5 component
$a[15.0]; // ok, as 15.0 == 15

Calling a static element on a trait

Calling a static method, or accessing a static property directly on a trait is deprecated. Static methods and properties should only be accessed on a class using the trait.

Returning a non-Array from __sleep()

Returning a value which is not an Array from __sleep() now generates a diagnostic.

Returning by reference from a void function

function &test(): void {}
Such a function is contradictory, and already emits the following E_NOTICE when called: Only variable references should be returned by reference.

Autovivification from false

Autovivification is the process of creating a new Array when appending to a value. Autovivification is prohibited from scalar values, false however was an exception. This is now deprecated.

$arr[] = 2;   // deprecated


Autovivification from null and undefined values is still allowed:

// From undefined
$arr[] = 'some value';
$arr['doesNotExist'][] = 2;
// From null
$arr null;
$arr[] = 2;


Verifying non-string arguments

Passing a non-string argument is deprecated. In the future, the argument will be interpreted as a string instead of an ASCII codepoint. Depending on the intended behavior, the argument should either be casted to String or an explicit call to chr() should be made. All ctype_*() functions are affected.


The date_sunrise() and date_sunset() have been deprecated in favor of date_sun_info().

The strptime() has been deprecated. Use date_parse_from_format() instead (for locale-independent parsing), or IntlDateFormatter::parse() (for locale-dependent parsing).



The filter.default INI directive is deprecated.


The num_points of imageopenpolygon() and imagefilledpolygon() has been deprecated.


The mhash(), mhash_keygen_s2k(), mhash_count(), mhash_get_block_size(), and mhash_get_hash_name() have been deprecated. Use the hash_*() functions instead.


The NIL constant has been deprecated. Use 0 instead.


Calling IntlCalendar::roll() with a Boolean argument is deprecated. Use 1 and -1 instead of true and false respectively.

Multibyte String

Calling mb_check_encoding() without any arguments is deprecated.


The mysqli_driver::$driver_version property has been deprecated. It was meaningless and outdated, use PHP_VERSION_ID instead.

Calling mysqli::get_client_info() or mysqli_get_client_info() with the mysqli argument has been deprecated. Call mysqli_get_client_info() without any arguments to obtain the version information of the client library.

The mysqli::init() method has been deprecated. Replace calls to parent::init() with parent::__construct().


The oci8.old_oci_close_semantics INI directive is deprecated.


odbc_result_all() has been deprecated.


The PDO::FETCH_SERIALIZE fetch mode has been deprecated.


Not passing the connection argument to all pgsql_*() functions has been deprecated.


The ssl_method option of SoapClient::__construct() has been deprecated in favor of SSL stream context options.


Calling key(), current(), next(), prev(), reset(), or end() on Objekts is deprecated. Either use get_mangled_object_vars() on the object first, or use ArrayIterator.

The auto_detect_line_endings INI directive is deprecated. If necessary, handle "\r" line breaks manually instead.

The FILE_BINARY and FILE_TEXT constants have been deprecated. They never had any effect.

add a note add a note

User Contributed Notes

There are no user contributed notes for this page.
To Top