PHP Conference Japan 2024

已弃用特性

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) {}
因为在必填参数之前的可选参数已弃用。

将 0 提升到负数次幂

将数字提升到负数次幂等同于取该数字提升到该次幂的相反数的倒数。也就是说,10-2 等同于 1 / 102。因此,将 0 提升到负数次幂对应于除以 0,即 0-2 等同于 1 / 02,或 1 / 0。因此,此行为已弃用。

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

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

使用下划线 _ 作为类名

将类命名为 _ 现已弃用

<?php
class _ {}

注意:

名称以下划线开头的类弃用

<?php
class _MyClass {}

使用 trigger_error()E_USER_ERROR

使用 error_level 等于 E_USER_ERROR 调用 trigger_error() 现已弃用。

此类用法应替换为抛出异常或调用 exit(),具体取决于哪种更合适。

E_STRICT 常量

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

cURL

CURLOPT_BINARYTRANSFER 常量现已弃用。

日期

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

nullfalse 传递给 dba_key_split() 现已弃用。在这些情况下,它始终会返回 false

DOM

DOM_PHP_ERR 常量现已弃用。

以下属性已正式弃用

  • DOMDocument::$actualEncoding
  • DOMDocument::$config
  • DOMEntity::$actualEncoding
  • DOMEntity::$encoding
  • DOMEntity::$version

哈希

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

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() 的 2 个参数签名现已弃用。请改用带有 row 参数设置为 null 的 3 个参数签名。

随机数

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

反射

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

会话

使用超过两个参数调用 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

int 传递给 SoapServer::addFunction() 现已弃用。如果需要提供所有 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()

使用大写 S 标记使用 unserialize() 反序列化字符串现已弃用。

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

XML

xml_set_object() 函数现已弃用。

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

添加注释

用户贡献的注释

此页面没有用户贡献的注释。
To Top