PHP 中有不少東西是隨著版本升級被去掉的。這些去掉的東西有些是過時的語法,有些是不安全的函數,有些是性能問題。本文將會對 PHP 中一些被去掉的東西進行介紹,并分析去掉的原因以及對我們開發的影響。
首先,我們來看看一個經常使用的語法:魔法引號。在 PHP 5.3.0 版本之前,我們可以使用類似 $var 的語法來訪問一個變量,也可以使用類似 ${var} 的語法來訪問一個變量。但是在 PHP 5.3.0 版本之后,魔法引號被徹底去掉了。現在,我們在訪問變量時必須使用 $var 的語法,或者將變量包含在花括號中。魔法引號被去掉的原因是因為它存在很多潛在的問題,比如不安全的代碼注入問題。
// PHP 5.3.0 之前的寫法 $name = "Tom"; echo "Hello $name!"; // 輸出 Hello Tom! // PHP 5.3.0 之后的寫法 $name = "Tom"; echo "Hello {$name}!"; // 輸出 Hello Tom!
另外一個被去掉的東西是 register_globals。在 PHP 4.x 版本中,register_globals 是一個非常方便的功能,它可以將 URL 參數、POST 參數以及 Cookie 設置的變量在腳本中自動設置為全局變量,從而可以省去很多單獨獲取參數的代碼。但是在 PHP 5.x 版本之后,它被視為極不安全的功能,并被徹底去掉。
// PHP 4.x 中的寫法,可以直接訪問 $_GET['id'] 的值 $id = $id; // PHP 5.x 中的寫法,需要通過 $_GET 數組訪問 $id = $_GET['id'];
另外一個被去掉的東西是 magic_quotes_gpc。在 PHP 5.4.0 版本之前,magic_quotes_gpc 是一個默認開啟的功能,它可以將所有通過 URL 參數、POST 參數以及 Cookie 設置的字符串自動轉義,以防止 SQL 注入等安全問題。但是在 PHP 5.4.0 版本之后,這個功能被視為不必要的,并被徹底去掉了。
// PHP 5.3.0 之前的寫法,magic_quotes_gpc 開啟的情況下會自動轉義 $name = "Tom O'Connor"; echo "Hello $name!"; // 輸出 Hello Tom O\'Connor! // PHP 5.4.0 之后的寫法,需要手動轉義 $name = "Tom O'Connor"; echo "Hello " . addslashes($name) . "!"; // 輸出 Hello Tom O\'Connor!
除了上述三個例子以外,PHP 中還有很多被去掉的功能。這些功能的去掉意味著我們不能再使用這些已經過時或不安全的語法和函數了。在新的 PHP 版本中,我們需要使用新的語法和函數來代替這些被去掉的功能。正確使用新的語法和函數,可以讓我們的代碼更加安全、可讀、可維護、性能更好。
總之,隨著 PHP 的版本升級,我們需要了解哪些功能被去掉了,哪些語法和函數被推薦使用,以便我們能夠編寫更加高效、安全和先進的代碼。