在新版本的 PHP 中使用舊的 PHP 代碼

現在,PHP 已經發展成為一種流行的腳本語系,可以在很多公共的資源裡找到可以在自己的腳本中重新利用的代碼。PHP 語系的開發者為向下相容性下了很多功夫,因此在新版本的 PHP 下,老版本的代碼應該可以在不作任何改動的情況下(理想地)運行。不過實際上,還是必須對老的代碼做一些改動。

有可能影響到老版本的代碼的最重要的兩點改動分別是:

  • 取消了舊的 $HTTP_*_VARS 陣列(在函數或是方法中原本是全局變量)。PHP 4.1.0 版本引入了如下自動全局陣列變量$_GET$_POST$_COOKIE$_SERVER$_FILE$_ENV$_REQUEST 以及 $_SESSION。老的 $HTTP_*_VARS 陣列,諸如 $HTTP_POST_VARS 等,從 PHP 3 就已經開始使用,它們仍然存在。自 PHP 5.0.0 起,長格式的 PHP 預定義變量可以通過設定 register_long_arrays 來屏蔽。

  • 外部變量不再被預設註冊為全局變量。也就是說,從 PHP 4.2.0 版開始,php.ini 中的設定選項 register_globals 預設值變成了 off。建議用以上提到的自動全局陣列變量來訪問這些值。但可能老的腳本、書籍以及教學都可能建立在該設定為 on 的基礎上。若果該選項被設定為 on,則可以在 URL http://www.example.com/foo.php?id=42 中直接使用變量 $id。但不管被設定為 on 還是 off,$_GET['id'] 一直有效。

若果希望瞭解關於這些改動的細節,請參閱「預定義變量」一章以及其中的連線。