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.
null
to non-nullable parameters of built-in functionsScalar 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.
<?php
var_dump(str_contains("foobar", null));
// Deprecated: Passing null to parameter #2 ($needle) of type string
// is deprecated
?>
The implicit conversion of float to int which leads to a loss in precision is now deprecated. This affects array keys, int type declarations in coercive mode, and operators working on ints.
<?php
$a = [];
$a[15.5]; // deprecated, as key value loses the 0.5 component
$a[15.0]; // ok, as 15.0 == 15
?>
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 value which is not an array from __sleep() now generates a diagnostic.
<?php
function &test(): void {}
?>
E_NOTICE
when called:
Only variable references should be returned by reference
.
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.
<?php
$arr = false;
$arr[] = 2; // deprecated
?>
Note:
Autovivification from
null
and undefined values is still allowed:<?php
// From undefined
$arr[] = 'some value';
$arr['doesNotExist'][] = 2;
// From null
$arr = null;
$arr[] = 2;
?>
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
cast to string or an explicit call to
chr() should be made.
All ctype_*()
functions are affected.
date_sunrise() and date_sunset() have been deprecated in favor of date_sun_info().
strptime() has been deprecated. Use date_parse_from_format() instead (for locale-independent parsing), or IntlDateFormatter::parse() (for locale-dependent parsing).
strftime() and gmstrftime() have been deprecated. Use date() instead (for locale-independent formatting), or IntlDateFormatter::format() (for locale-dependent formatting).
The FILTER_SANITIZE_STRING
and
FILTER_SANITIZE_STRIPPED
filters are deprecated.
The filter.default INI directive is deprecated.
The num_points
of imagepolygon(),
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
bool argument is deprecated.
Use 1
and -1
instead of
true
and false
respectively.
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 objects is deprecated. Either convert the object to an array using get_mangled_object_vars() first, or use the methods provided by a class that implements Iterator, such as ArrayIterator, instead.
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.