2024 年日本 PHP 研討會

已棄用功能

PHP 核心

不帶明確括號的巢狀三元運算子

巢狀三元運算必須明確使用括號來指定運算順序。先前,在不使用括號的情況下,左關聯性在大多數情況下不會產生預期的行為。

<?php
1
? 2 : 3 ? 4 : 5; // 已棄用
(1 ? 2 : 3) ? 4 : 5; // 可以
1 ? 2 : (3 ? 4 : 5); // 可以
?>

當巢狀到中間運算元時,括號並*非*必要的,因為這總是明確的,並且不受結合性的影響。

1 ? 2 ? 3 : 4 : 5 // 可以

使用大括號的陣列和字串偏移存取

使用大括號的陣列和字串偏移存取語法已被棄用。請使用 $var[$idx] 取代 $var{$idx}

(real) 轉型和 is_real() 函式

(real) 轉型已被棄用,請改用 (float)

is_real() 函式也已被棄用,請改用 is_float()

在使用 $this 時解除繫結 $this

解除繫結使用 $this 的非靜態閉包的 $this 已被棄用。

沒有父類別的 parent 關鍵字

在沒有父類別的類別中使用 parent 已被棄用,未來將會拋出編譯時錯誤。目前只有在執行時期存取父類別時才會產生錯誤。

allow_url_include INI 選項

allow_url_include ini 指令已被棄用。啟用它會在啟動時產生棄用通知。

基數轉換函式中的無效字元

將無效字元傳遞給 base_convert()bindec()octdec()hexdec() 現在會產生棄用通知。結果仍將如同無效字元不存在一樣進行計算。開頭和結尾的空白字元,以及 0x 類型的字首(取決於基數)仍然允許。

對物件使用 array_key_exists()

對物件使用 array_key_exists() 已被棄用。應該改用 isset()property_exists()

魔術引號函式

get_magic_quotes_gpc()get_magic_quotes_runtime() 函式已被棄用。它們一律會傳回 false

hebrevc() 函式

hebrevc() 函式已被棄用。它可以被 nl2br(hebrev($str)) 或最好是使用 Unicode RTL 支援來取代。

convert_cyr_string() 函式

convert_cyr_string() 函式已被棄用。它可以用 mb_convert_string()iconv()UConverter 其中之一來取代。

money_format() 函式

money_format() 函式已被棄用。它可以用 intl 的 NumberFormatter 功能來取代。

ezmlm_hash() 函式

ezmlm_hash() 函式已被棄用。

restore_include_path() 函式

restore_include_path() 函式已被棄用。它可以用 ini_restore('include_path') 來取代。

以舊有參數順序的 Implode

以反向順序傳遞參數給 implode() 已被棄用,請使用 implode($glue, $parts) 取代 implode($parts, $glue)

COM

以大小寫不敏感的常數註冊導入類型程式庫已被棄用。

篩選器

FILTER_SANITIZE_MAGIC_QUOTES 已被棄用,請改用 FILTER_SANITIZE_ADD_SLASHES

多位元組字串

傳遞非字串模式給 mb_ereg_replace() 已被棄用。目前,非字串模式會被解譯為 ASCII 字碼點。在 PHP 8 中,模式將會被解譯為字串。

將編碼作為第三個參數傳遞給 mb_strrpos() 已被棄用。請改為傳遞 0 位移,並將編碼作為第四個參數。

輕量目錄存取協定

ldap_control_paged_result_response()ldap_control_paged_result() 已被棄用。分頁控制可以改為與 ldap_search() 一起發送。

反射

呼叫 ReflectionType::__toString() 現在會產生棄用通知。自 PHP 7.1 起,文件中已棄用此方法,建議使用 ReflectionNamedType::getName(),但由於技術原因先前並未拋出棄用通知。

所有 Reflection 類別上的 export() 方法已被棄用。請建構一個 Reflection 物件並將其轉換為字串。

<?php
// ReflectionClass::export(Foo::class, false) 的結果為:
echo new ReflectionClass(Foo::class), "\n";

// $str = ReflectionClass::export(Foo::class, true) 的結果為:
$str = (string) new ReflectionClass(Foo::class);
?>

通訊端 (Socket)

由於 glibc 的上游棄用,socket_addrinfo_lookup()AI_IDN_ALLOW_UNASSIGNEDAI_IDN_USE_STD3_ASCII_RULES 旗標已被棄用。

新增註記

使用者貢獻的註記 1 則註記

Ahmad Asjad
4 年前
(\?[^php]).*(\:).*(\?).*(\:[^=])
上述正規表達式可以幫助其他人找到巢狀的三元運算子
To Top