2024 年日本 PHP 研討會

已棄用的功能

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-21 / 102 相同。因此,將 0 提升為負數次方相當於除以 0,例如 0-21 / 021 / 0 相同。因此,此行為已被棄用。

這會影響指數運算子 **pow() 函式。

如果需要 IEEE 754 語義,則應使用新的 fpow() 函式。

使用底線 _ 作為類別名稱

將類別命名為 _ 現在已被棄用

<?php
class _ {}

注意:

名稱以底線開頭的類別*並未*被棄用

<?php
class _MyClass {}

使用 trigger_error() 搭配 E_USER_ERROR

E_USER_ERROR 作為 error_level 呼叫 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() 的兩個參數簽章已被棄用。請改用三個參數簽章,並將 row 設為 null

隨機數

lcg_value() 已被棄用,因為該函式在多方面都有問題。請改用 Random\Randomizer::getFloat()

反射

使用一個參數呼叫 ReflectionMethod::__construct() 已被棄用。請改用 ReflectionMethod::createFromMethodName()

Session

使用兩個以上參數呼叫 session_set_save_handler() 已被棄用。請改用兩個參數的簽章。

更改 session.sid_lengthsession.sid_bits_per_character INI 設定的值已被棄用。請更新 Session 儲存後端以接受 32 個字元的十六進位 Session 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() 函式已被棄用。

將非 可呼叫 的字串傳遞給 xml_set_()* 函式現已棄用。

新增註記

使用者貢獻的註記

此頁面沒有使用者貢獻的註記。
To Top