不相容的變更
傳遞過少函式參數時拋出例外
先前,呼叫使用者定義函式時,如果參數過少,會發出警告。現在,此警告已提升為錯誤例外。此變更僅適用於使用者定義函式,不適用於內建函式。例如
禁止對範圍自省函式進行動態呼叫
某些函式的動態呼叫已被禁止(例如 $func()
或 array_map('extract', ...)
等形式)。這些函式會檢查或修改其他範圍,並呈現出模稜兩可且不可靠的行為。這些函式如下:
無效的類別、介面和特性名稱
以下名稱不能用於命名類別、介面或特性:
禁止在識別碼中使用 ASCII 刪除控制字元
ASCII 刪除控制字元 (0x7F
) 不再能用於未加引號的識別名稱中。
error_log
設定會隨著 syslog
值而改變
如果 ini 設定檔中的 error_log
設定為 syslog
,PHP 錯誤級別會映射到 syslog 錯誤級別。與先前所有錯誤都以 notice 級別記錄的做法相比,這在錯誤日誌中帶來了更細緻的區分。
不要對未完整建構的物件呼叫解構函式
對於在建構函式執行期間拋出例外狀況的物件,現在永遠不會呼叫解構函式。在以前的版本中,此行為取決於物件是否在建構函式外部被引用(例如,透過例外回溯)。
不再支援對字串使用空的索引運算子
將空的索引運算子應用於字串(例如 $str[] = $x
)會拋出致命錯誤,而不是靜默地轉換為陣列。
透過字串索引在空字串上進行賦值
現在,在空字串上透過字元修改字串的方式與非空字串相同,也就是說,寫入超出範圍的偏移量會以空格填充字串,其中非整數類型會轉換為整數,並且只使用賦值字串的第一個字元。以前,空字串會被靜默地視為空陣列。
已移除的 ini 指令
以下 ini 指令已被移除
-
session.entropy_file
-
session.entropy_length
-
session.hash_function
-
session.hash_bits_per_character
在透過參考賦值自動建立元素時,陣列的排序已更改
當陣列中的元素是透過在參考賦值中引用它們而自動建立時,這些元素的順序已更改。例如
相同元素的排序順序
內部排序演算法已改良,這可能導致比較結果相等的元素排序順序與以往不同。
注意:
不要依賴比較結果相等元素的順序;它隨時可能改變。
E_RECOVERABLE 錯誤的錯誤訊息
E_RECOVERABLE 錯誤的錯誤訊息已從「可捕捉的致命錯誤 (Catchable fatal error)」更改為「可恢復的致命錯誤 (Recoverable fatal error)」。
不再支援 sslv2 串流
OpenSSL 中的 sslv2 串流已被移除。
在編譯時期禁止在已設定回傳型別的函式中使用 "return;"
在宣告了回傳型別的函式中,沒有參數的 return 陳述式現在會觸發 E_COMPILE_ERROR
(除非回傳型別宣告為 void),即使該 return 陳述式永遠不會被執行到。