2024 日本 PHP 研討會

已棄用的功能

PHP 核心

實作 Serializable 但沒有 __serialize()__unserialize()

如果沒有提供對 PHP 7.4 之前版本的支援,則應該只實作新的方法,或者兩者都應該實作。

null 傳遞給內建函式的非空參數

內建函式的純量類型預設為可空。此行為已被棄用,以便與使用者自訂函式的行為一致,在使用者自訂函式中,純量類型需要明確標記為可空。

<?php
var_dump
(str_contains("foobar", null));
// 已棄用:傳遞 null 至字串型別的參數 #2 ($needle) 已被棄用
// 已被棄用
?>

隱含不兼容的 浮點數整數 的轉換

導致精度損失的隱含 浮點數整數 的轉換現已棄用。這會影響 陣列 鍵值、強制模式下的 整數 類型宣告,以及對 整數 進行運算的運算子。

<?php
$a
= [];
$a[15.5]; // 已棄用,因為鍵值會失去 0.5 的部分
$a[15.0]; // 可以,因為 15.0 == 15
?>

在 trait 上呼叫 靜態 元素

直接在 trait 上呼叫 靜態 方法或存取 靜態 屬性已被棄用。靜態方法和屬性只能透過使用該 trait 的類別來存取。

__sleep() 返回非 陣列

__sleep() 返回非 陣列 的值現在會產生診斷訊息。

void 函式返回參考

<?php
function &test(): void {}
?>
這樣的函式是矛盾的,並且在被呼叫時已經會發出以下 E_NOTICEOnly variable references should be returned by reference(只有變數參考應該以參考方式返回)。

false 自動建立變數(Autovivification)

自動建立變數是指在附加值時建立新的 陣列 的過程。從純量值自動建立變數是被禁止的,然而 false 是一個例外。現在這已被棄用。

<?php
$arr
= false;
$arr[] = 2; // 已棄用
?>

注意:

null 和未定義值自動建立變數仍然允許

<?php
// 從未定義的變數
$arr[] = 'some value';
$arr['doesNotExist'][] = 2;
// 從 null
$arr = null;
$arr[] = 2;
?>

字元類型 (ctype)

驗證非字串參數

傳遞非字串參數已被棄用。未來,該參數將被解釋為字串,而不是 ASCII 字碼點。根據預期行為,應該將參數強制轉換為 字串 或明確呼叫 chr() 函式。所有 ctype_*() 函式都會受到影響。

日期

date_sunrise()date_sunset() 已被棄用,建議使用 date_sun_info()

strptime() 已被棄用。請改用 date_parse_from-format()(用於與語系無關的解析)或 IntlDateFormatter::parse()(用於與語系相關的解析)。

strftime()gmstrftime() 已被棄用。請改用 date()(用於與語系無關的格式化)或 IntlDateFormatter::format()(用於與語系相關的格式化)。

過濾器 (Filter)

FILTER_SANITIZE_STRINGFILTER_SANITIZE_STRIPPED 過濾器已被棄用。

filter.default INI 指令已被棄用。

GD

imagepolygon()imageopenpolygon()imagefilledpolygon()num_points 參數已被棄用。

雜湊 (Hash)

mhash()mhash_keygen_s2k()mhash_count()mhash_get_block_size()mhash_get_hash_name() 已被棄用。請改用 hash_*() 函式。

IMAP

NIL 常數已被棄用。請改用 0

Intl (國際化)

使用 布林值 參數呼叫 IntlCalendar::roll() 已被棄用。請分別使用 1-1 取代 truefalse

多位元組字串 (Multibyte String)

不帶任何參數呼叫 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

INI 指令 oci8.old_oci_close_semantics 已被棄用。

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

INI 指令 auto_detect_line_endings 已被棄用。如有必要,請手動處理 "\r" 換行符號。

常數 FILE_BINARYFILE_TEXT 已被棄用。它們從未生效過。

新增註記

使用者貢獻的註記

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