如果不用兼容 PHP 7.4 以前的版本,就只需要实现新的方法,否则需要同时实现两个方法。
null
传递给内置函数的非 null 值参数内置函数的标量类型默认可为 null。废弃为了与用户定义的函数行为保持一致,标量类型需要明确标记为可为 null 的行为。
<?php
var_dump(str_contains("foobar", null));
// Deprecated: Passing null to parameter #2 ($needle) of type string
// is deprecated
?>
从 float 隐式转换为 int 将会导致精度的丢失,目前这种行为已被废弃。 这将影响到 array 中的键、严格模式下 int 类型的声明以及对 int 的操作。
<?php
$a = [];
$a[15.5]; // 废弃,作为键值将会丢失 0.5
$a[15.0]; // OK,因为 15.0 == 15
?>
在 trait 上直接调用 static 方法、直接访问 static 属性的行为已被废弃。静态方法和属性只能在使用了 trait 的类上被访问。
在 __sleep() 中返回一个非 array 类型的值现在将会产生一个诊断。
<?php
function &test(): void {}
?>
E_NOTICE
提示:Only variable references should be returned by reference
。
false
进行自动代入(Autovivification)自动代入指的是追加一个值时创建出新 array 的过程。对于标量值而言,自动代入是不被允许的;然而 false 是一个例外。现在这将会被废弃。
<?php
$arr = false;
$arr[] = 2; // 废弃
?>
注意:
对
null
或者未定义的值进行自动代入仍然是被允许的:<?php
// 从未定义的值
$arr[] = 'some value';
$arr['doesNotExist'][] = 2;
// 从 null
$arr = null;
$arr[] = 2;
?>
传递一个非字符串类型参数的行为已被废弃。在将来,参数将被解释为一个字符串而不是 ASCII 编码。根据可预期的行为,参数需要被转化为 string 或者对
chr() 进行一次显式调用。这会影响所有的 ctype_*()
函数。
在 date_sun_info() 的支持下,date_sunrise() 和 date_sunset() 已被废弃。
strptime() 已被废弃。请使用 date_parse_from_format() (不依赖 locale 的解析)或者 IntlDateFormatter::parse() (依赖 locale 的解析)代替。
strftime() 和 gmstrftime() 已被废弃。请使用date()(不依赖 locale 的格式化)或者 IntlDateFormatter::format() (依赖 locale 的格式化)代替。
imagepolygon()、imageopenpolygon() 和
imagefilledpolygon()
的 num_points
参数已被废弃。
mhash()、
mhash_keygen_s2k()、
mhash_count()、
mhash_get_block_size()、
mhash_get_hash_name() 已被废弃。 请使用
hash_*()
系列函数代替。
NIL
常量已被废弃。请使用 0
代替。
使用 bool 参数调用 IntlCalendar::roll()
已被废弃。请分别使用 1
和
-1
来代替 true
and false
。
无参数调用 mb_check_encoding() 已被废弃。
mysqli_driver::$driver_version 属性已被废弃。它是无意义且过时的,使用
PHP_VERSION_ID
来代替。
使用 mysqli
参数来调用
mysqli::get_client_info()
或 mysqli_get_client_info() 已被废弃。请不带任何参数调用
mysqli_get_client_info()
来获取客户端类库的版本信息。
mysqli::init() 方法已被废弃。使用 parent::__construct() 来代替对 parent::init() 的调用。
INI 设置项 oci8.old_oci_close_semantics 已被废弃。
odbc_result_all() 已被废弃。
PDO::FETCH_SERIALIZE
获取模式已被废弃。
对于所有 pgsql_*()
函数不传递连接参数的方式已被废弃。
在 SSL 流上下文参数的代替下,
SoapClient::__construct() 的
ssl_method
选项已被废弃。
在对象上调用 key()、current()、 next()、prev()、 reset() 或 end() 的方式已被废弃。 可以使用 get_mangled_object_vars() 将对象转换为数组, 或使用实现 Iterator 的类所提供的方法, 例如 ArrayIterator 来代替。
INI 配置项
auto_detect_line_endings
已被废弃。如有必要,可以手动处理 "\r"
换行符。
FILE_BINARY
和 FILE_TEXT
常量已被废弃。它们从未产生过任何作用。