PHP 8.1.x 废弃的功能

PHP 核心中废弃的功能

实现无 __serialize()__unserialize()Serializable

如果不用兼容 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
?>

不兼容从 floatint 的隐式转换

float 隐式转换为 int 将会导致精度的丢失,目前这种行为已被废弃。 这将影响到 array 中的键、严格模式下 int 类型的声明以及对 int 的操作。

<?php
$a 
= [];
$a[15.5]; // 废弃,作为键值将会丢失 0.5
$a[15.0]; // OK,因为 15.0 == 15
?>

在 trait 上调用 static 元素

在 trait 上直接调用 static 方法、直接访问 static 属性的行为已被废弃。静态方法和属性只能在使用了 trait 的类上被访问。

__sleep() 中返回非 array 类型值

__sleep() 中返回一个非 array 类型的值现在将会产生一个诊断。

在返回值为 void 的函数中通过引用进行返回

<?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;
?>

ctype

校验非字符串类型的参数

传递一个非字符串类型参数的行为已被废弃。在将来,参数将被解释为一个字符串而不是 ASCII 编码。根据可预期的行为,参数需要被转化为 string 或者对 chr() 进行一次显式调用。这会影响所有的 ctype_*() 函数。

Date

date_sun_info() 的支持下,date_sunrise()date_sunset() 已被废弃。

strptime() 已被废弃。请使用 date_parse_from_format() (不依赖 locale 的解析)或者 IntlDateFormatter::parse() (依赖 locale 的解析)代替。

strftime()gmstrftime() 已被废弃。请使用date()(不依赖 locale 的格式化)或者 IntlDateFormatter::format() (依赖 locale 的格式化)代替。

Filter

FILTER_SANITIZE_STRINGFILTER_SANITIZE_STRIPPED 过滤器已被废弃。

INI 设置项 filter.default 已被废弃

GD

imageopenpolygon()imagefilledpolygon()num_points 参数已被废弃。

Hash

mhash()mhash_keygen_s2k()mhash_count()mhash_get_block_size()mhash_get_hash_name() 已被废弃。 请使用 hash_*() 系列函数代替。

IMAP

NIL 常量已被废弃。请使用 0 代替。

Intl

使用 bool 参数调用 IntlCalendar::roll() 已被废弃。请分别使用 1-1 来代替 true and false

多字节字符串

无参数调用 mb_check_encoding() 已被废弃。

MySQLi

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() 的调用。

OCI8

INI 设置项 oci8.old_oci_close_semantics 已被废弃。

ODBC

odbc_result_all() 已被废弃。

PDO

PDO::FETCH_SERIALIZE 获取模式已被废弃。

PgSQL

对于所有 pgsql_*() 函数不传递连接参数的方式已被废弃。

SOAP

在 SSL 流上下文参数的代替下, SoapClient::__construct()ssl_method 选项已被废弃。

常规

对一个对象调用 key()current()next()prev()reset()end() 已被废弃。对一个对象应优先使用 get_mangled_object_vars(),或使用 ArrayIterator

INI 配置项 auto_detect_line_endings 已被废弃。如有必要,可以手动处理 "\r" 换行符。

FILE_BINARYFILE_TEXT 常量已被废弃。它们从未产生过任何作用。