PHP – 已棄用功能



隨著每個新版本的釋出,都會新增一些新功能,同時也會刪除一些被認為已過時的功能。在本章中,我們將瞭解 PHP 5 版本之後棄用的功能。

PHP 7 中棄用

PHP 4 樣式建構函式

PHP 4 樣式建構函式是指方法名稱與定義它們的類名稱相同,現在已棄用,將來將被移除。如果 PHP 4 建構函式是類中定義的唯一建構函式,則 PHP 7 將發出 E_DEPRECATED。實現 __construct() 方法的類不受影響。

示例

請檢視以下示例 -

<?php
   class A {
      function A() {
         print('Style Constructor');
      }
   }
?>

它在瀏覽器上產生以下輸出 -

Deprecated: Methods with the same name as their class will not be 
constructors in a future version of PHP; A has a deprecated constructor in...

對非靜態方法的靜態呼叫

對非靜態方法的靜態呼叫已棄用,將來可能會被移除。

示例

請檢視以下示例 -

<?php
   class A {
      function b() {
         print('Non-static call');
      }
   }
   A::b();
?>

它在瀏覽器上產生以下輸出 -

Deprecated: Non-static method A::b() should not be called statically in...
Non-static call

password_hash() 的 salt 選項

password_hash() 函式的 salt 選項已棄用,以便開發人員不再生成自己的(通常是不安全的)salt。當開發人員未提供 salt 時,函式本身會生成一個加密安全的 salt - 因此不再需要自定義 salt 生成。

capture_session_meta SSL 上下文選項

capture_session_meta SSL 上下文選項已棄用。SSL 元資料現在透過 stream_get_meta_data() 函式使用。

ext/mcrypt

mcrypt 擴充套件已棄用,建議使用 OpenSSL。

未加引號的字串

不存在的全域性常量的未加引號的字串被視為其自身字串。此行為過去會發出 E_NOTICE,但現在會發出 E_WARNING。在 PHP 的下一個主要版本中,將改為丟擲 Error 異常。

__autoload() 方法

__autoload() 方法已棄用,因為它不如 spl_autoload_register()(因為它無法連結自動載入器),並且兩種自動載入樣式之間沒有互操作性。

create_function() 函式

鑑於此函式存在安全問題,現在已棄用。首選的替代方法是使用匿名函式。

each() 函式

此函式會導致某些語言更改的實現問題。因此,它已棄用。

不區分大小寫的常量

不區分大小寫的常量的宣告已棄用。現在將 true 作為第三個引數傳遞給 define() 將生成棄用警告。

(real) 和 is_real() 函式

(real) 轉換已棄用,請改用 (float)。is_real() 函式也已棄用,請改用 is_float()。

"parent" 關鍵字

在沒有父類的類中使用 parent 已棄用,將來會丟擲編譯時錯誤。目前,只有在執行時訪問父類時才會生成錯誤。

PHP 8 中棄用

如果帶有預設值的引數後跟必需引數,則預設值無效。從 PHP 8.0.0 開始,這已棄用,通常可以透過刪除預設值來解決,而不會更改功能 -

<?php
   function test($a = [], $b) {}  // Before
   function test($a, $b) {}      // After
?>

此規則的一個例外是表單 Type $param = null 的引數,其中 null 預設值使型別隱式可為空。此用法仍然允許,但建議改用顯式可為空的型別 -

<?php
   function test(A $a = null, $b) {} 	// Still allowed
   function test(?A $a, $b) {}         // Recommended
?>

呼叫 get_defined_functions() 並將 exclude_disabled 顯式設定為 false 已棄用,並且不再有任何作用。get_defined_functions() 永遠不會包含停用的函式。

返回 true 或 false 的排序比較函式現在將丟擲棄用警告,應替換為返回小於、等於或大於零的整數的實現。

<?php
   // Replace
   usort($array, fn($a, $b) => $a > $b);
   // With
   usort($array, fn($a, $b) => $a <=> $b);
?>

隱式不相容的 float 到 int 轉換

現在已棄用導致精度損失的 float 到 int 的隱式轉換。這會影響陣列鍵、強制模式下的 int 型別宣告以及對 int 進行運算的運算子。

在特性上呼叫靜態元素

在特性上直接呼叫靜態方法或訪問靜態屬性已棄用。靜態方法和屬性只能在使用特性的類上訪問。

日期函式

date_sunrise() 和 date_sunset() 已棄用。請改用 date_sun_info()。

strptime() 已棄用。請改用 date_parse_from_format()(用於與區域設定無關的解析)或 IntlDateFormatter::parse()(用於與區域設定相關的解析)。

strftime() 和 gmstrftime() 已棄用。您可以改用 date()(用於與區域設定無關的格式化)或 IntlDateFormatter::format()(用於與區域設定相關的格式化)。

動態屬性

動態屬性的建立已棄用。請改用允許動態屬性的 stdClass。

廣告