弃用功能

PHP 核心

隐式可空参数

如果参数的默认值为 null,则其类型会被隐式扩展为接受 null

以下代码:

<?php
function foo(T1 $a = null) {}
应改为:
<?php
function foo(T1|null $a = null) {}
<?php
function foo(?T1 $a = null) {}

但是,如果此类参数声明后面跟着一个必需参数:

<?php
function foo(T1 $a, T2 $b = null, T3 $c) {}
则必须改为:
<?php
function foo(T1 $a, T2|null $b, T3 $c) {}
<?php
function foo(T1 $a, ?T2 $b, T3 $c) {}
因为在必需参数前面放置可选参数已被弃用。

零的负数次幂

一个数的负数次幂等于该数正指数次幂的倒数。即 10-2 等同于 1 / 102。 因此,将 0 进行负数次幂相当于除以 0,即 0-2 等同于 1 / 02,也就是 1 / 0。因此,此行为已被弃用。

这影响幂运算符 **pow() 函数。

如果需要 IEEE 754 语义,应使用新的 fpow() 函数。

使用下划线 _ 作为类名

将类命名为 _ 现已弃用:

<?php
class _ {}

注意:

以下划线开头的类名不受此弃用影响:

<?php
class _MyClass {}

E_USER_ERROR 传递给 trigger_error()

error_level 设为 E_USER_ERROR 调用 trigger_error() 现已弃用。

此类用法应替换为抛出异常或调用 exit(),视具体情况选择更合适的方式。

E_STRICT 常量

由于 E_STRICT 错误级别已被移除,此常量现已弃用。

cURL

CURLOPT_BINARYTRANSFER 常量现已弃用。

Date

DatePeriod::__construct(string $isostr, int $options = 0) 签名已被弃用。请改用 DatePeriod::createFromISO8601String()

SUNFUNCS_RET_TIMESTAMPSUNFUNCS_RET_STRINGSUNFUNCS_RET_DOUBLE 常量现已弃用。这是继 PHP 8.1.0 弃用 date_sunset()date_sunrise() 函数之后的后续操作。

DBA

现已弃用向 dba_key_split() 传递 nullfalse。在这些情况下,该函数始终返回 false

Hash

向哈希函数传递无效选项现已弃用。

Intl

使用超过两个参数调用 intlcal_set()IntlCalendar::set() 已被弃用。请改用 IntlCalendar::setDate()IntlCalendar::setDateTime()

使用超过两个参数调用 intlgregcal_create_instance()IntlGregorianCalendar::__construct() 已被弃用。请改用 IntlGregorianCalendar::createFromDate()IntlGregorianCalendar::createFromDateTime()

LDAP

使用超过两个参数调用 ldap_connect() 已被弃用。请改用 ldap_connect_wallet()

使用超过四个参数调用 ldap_exop() 已被弃用。请改用 ldap_exop_sync()

MySQLi

mysqli_ping() 函数和 mysqli::ping() 方法现已弃用,因为重连功能已在 PHP 8.2.0 中移除。

mysqli_kill() 函数和 mysqli::kill() 方法现已弃用。如果需要此功能,可以改用 SQL KILL 命令。

mysqli_refresh() 函数和 mysqli::refresh() 方法现已弃用。如果需要此功能,可以改用 SQL FLUSH 命令。所有 MYSQLI_REFRESH_* 常量也已被弃用。

显式传递 mode 参数给 mysqli_store_result() 已被弃用。由于 MYSQLI_STORE_RESULT_COPY_DATA 常量仅与此函数配合使用,因此也已被弃用。

PDO_PGSQL

在美元引用字符串中使用转义的问号(??)已被弃用。由于 PDO_PGSQL 现在拥有自己的支持美元引用字符串的 SQL 解析器,不再需要在其中转义问号。

PGSQL

pg_fetch_result()pg_field_prtlen()pg_field_is_null() 的两参数签名现已弃用。 请改用三参数签名,并将 row 设置为 null

Random

lcg_value() 现已弃用,因为该函数存在多方面的问题。请改用 Random\Randomizer::getFloat()

Reflection

使用一个参数调用 ReflectionMethod::__construct() 已被弃用。请改用 ReflectionMethod::createFromMethodName()

Session

使用超过两个参数调用 session_set_save_handler() 已被弃用。请改用两参数签名。

修改 session.sid_lengthsession.sid_bits_per_character INI 设置的值已被弃用。请更新会话存储后端以接受 32 个字符的十六进制会话 ID,并停止修改这两个 INI 设置。

修改 session.use_only_cookiessession.use_trans_sidsession.trans_sid_tagssession.trans_sid_hostssession.referer_check INI 设置的值已被弃用。SID 常量也已被弃用。

SOAP

SoapServer::addFunction() 传递 int 现已弃用。如果需要提供所有 PHP 函数,请展平 get_defined_functions() 返回的数组。

SOAP_FUNCTIONS_ALL 常量现已弃用。

SPL

SplFixedArray::__wakeup() 方法现已弃用,因为该类实现了 SplFixedArray::__serialize()SplFixedArray::__unserialize(),应改用并重写这两个新方法。

SplFileObject::setCsvControl()SplFileObject::fputcsv()SplFileObject::fgetcsv()escape 参数使用默认值现已弃用。 必须通过位置参数或命名参数显式传递该值。如果已使用 SplFileObject::setCsvControl() 设置了新的默认值,则此规则不适用于 SplFileObject::fputcsv()SplFileObject::fgetcsv()

标准

使用两个参数调用 stream_context_set_option() 已被弃用。请改用 stream_context_set_options()

使用 unserialize() 反序列化带有大写 S 标签的字符串已被弃用。

fputcsv()fgetcsv()str_getcsv()escape 参数使用默认值现已弃用。 必须通过位置参数或命名参数显式传递该值。

XML

xml_set_object() 函数已被弃用。

xml_set_* 函数传递非 callable 字符串现已弃用。

添加备注

用户贡献的备注 1 note

up
3
john dot fro at mailinator dot com
1 year ago
Try using [$this, 'method_string'] in place of 'method_string' for functions like xml_set_element_handler, etc. 

As in xml_set_element_handler($this-parser, [$this, 'method'], [$this, 'another_method']);  

This is what the note about "callable" means--you need to reference the actual method in a callable way, not just use a string.
To Top