PHP Conference Japan 2024

已弃用特性

PHP 核心

在没有 __serialize()__unserialize() 的情况下实现 Serializable

如果未提供对 PHP 7.4 之前版本的支持,则应仅实现新的方法,或者两者都应实现。

null 传递给内置函数的非空参数

内置函数的标量类型默认为可空。此行为已弃用,以与用户定义函数的行为保持一致,在用户定义函数中,标量类型需要显式标记为可空。

<?php
var_dump
(str_contains("foobar", null));
// 已弃用:将 null 传递给参数 #2 ($needle) 的类型 string
// 已弃用
?>

隐式不兼容的 floatint 转换

现在已弃用 floatint 的隐式转换,这会导致精度损失。这会影响 array 键、强制模式下的 int 类型声明以及在 int 上操作的运算符。

<?php
$a
= [];
$a[15.5]; // 已弃用,因为键值丢失了 0.5 部分
$a[15.0]; // 正常,因为 15.0 == 15
?>

在特征上调用 static 元素

在特征上直接调用 static 方法或访问 static 属性已弃用。静态方法和属性应仅在使用特征的类上访问。

__sleep() 返回非 array

__sleep() 返回非 array 的值现在会生成诊断。

void 函数返回引用

<?php
function &test(): void {}
?>
这样的函数是矛盾的,并且在调用时已经发出以下 E_NOTICEOnly variable references should be returned by reference

来自 false 的自动激活

自动激活是在追加到值时创建新的 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_sunrise()date_sunset() 已弃用,取而代之的是 date_sun_info()

strptime() 已弃用。请改用 date_parse_from_format()(用于与区域设置无关的解析)或 IntlDateFormatter::parse()(用于与区域设置相关的解析)。

strftime()gmstrftime() 已弃用。请改用 date()(用于与区域设置无关的格式化)或 IntlDateFormatter::format()(用于与区域设置相关的格式化)。

过滤器

FILTER_SANITIZE_STRINGFILTER_SANITIZE_STRIPPED 过滤器已弃用。

filter.default INI 指令已弃用。

GD

imagepolygon()imageopenpolygon()imagefilledpolygon()num_points 已弃用。

哈希

mhash()mhash_keygen_s2k()mhash_count()mhash_get_block_size()mhash_get_hash_name() 已弃用。请改用 hash_*() 函数。

IMAP

NIL 常量已弃用。请改用 0

Intl

使用 bool 参数调用 IntlCalendar::roll() 已弃用。请改用 1-1 分别代替 truefalse

多字节字符串

在没有任何参数的情况下调用 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::init() 的调用替换为 parent::__construct()

OCI8

oci8.old_oci_close_semantics INI 指令已弃用。

ODBC

odbc_result_all() 已弃用。

PDO

PDO::FETCH_SERIALIZE 获取模式已弃用。

PgSQL

不向所有 pgsql_*() 函数传递连接参数已弃用。

SOAP

SoapClient::__construct()ssl_method 选项已弃用,建议使用 SSL 流上下文选项。

标准

对象 上调用 key()current()next()prev()reset()end() 已弃用。请先使用 get_mangled_object_vars()对象 转换为 数组,或者改用实现 Iterator 接口的类的提供的 方法,例如 ArrayIterator

auto_detect_line_endings INI 指令已弃用。如有必要,请手动处理 "\r" 换行符。

FILE_BINARYFILE_TEXT 常量已弃用。它们从未起作用。

添加注释

用户贡献的笔记

此页面没有用户贡献的笔记。
To Top