我非常希望將我們的許多服務器更新到PHP 5.3。這將會爲Zend Framework 2做好準備,並且還可以用於明顯的性能更新。不幸的是,我在這些服務器上有大量的遺留代碼,這些代碼在修改之前將會得到修復,但不能全部修復。我正在考慮更新,但在幾乎所有可以開始通過更新舊代碼開始工作的開發網站上禁用已棄用的功能錯誤。使用不建議使用的函數更新到PHP 5.3禁用警告
error_reporting(E_ALL^E_DEPRECATED);
是否有任何根本的原因,爲什麼這是一個壞主意?
我非常希望將我們的許多服務器更新到PHP 5.3。這將會爲Zend Framework 2做好準備,並且還可以用於明顯的性能更新。不幸的是,我在這些服務器上有大量的遺留代碼,這些代碼在修改之前將會得到修復,但不能全部修復。我正在考慮更新,但在幾乎所有可以開始通過更新舊代碼開始工作的開發網站上禁用已棄用的功能錯誤。使用不建議使用的函數更新到PHP 5.3禁用警告
error_reporting(E_ALL^E_DEPRECATED);
是否有任何根本的原因,爲什麼這是一個壞主意?
如果您還沒有閱讀migration guide,請特別注意Backward Incompatible Changes和Removed Extensions。
您有比棄用更大的問題。忽略E_DEPRECATED
是不夠的。由於不兼容的變化,還會出現其他類型的錯誤,或者甚至更糟,意外的行爲。
這裏有一個簡單的例子:
<?php
function goto($line){
echo $line;
}
goto(7);
?>
此代碼將正常工作,並在PHP 5.2.x輸出7
,但會給你在PHP 5.3.x.解析錯誤
你需要做的是取出該指南中的每個項目並檢查你的代碼並在需要的地方進行更新。爲了加快速度,您可以在第一階段中忽略棄用的功能,並且僅針對E_DEPRECATED
停用錯誤報告,但是您不能認爲在移植到其他主要PHP分支時只會收到一些無害的警告。
另外不要忘記你的黑客並儘快修復已棄用的問題。
問候,
阿林
注:我試圖從實用的角度回答這個問題,所以請不要告訴我,無視警告是壞的。我知道,但我也知道時間不是無限的資源。
那麼,你可能會忘記你設置了標誌並想知道爲什麼你的應用程序在下一次PHP更新中崩潰。在沒有適當的錯誤報告的情況下調試應用程序會非常令人沮喪。這是我能想到的一個原因。
但是,如果你這樣做,在某處記錄它。它可以爲您節省幾個小時,然後再記住設置標誌。
我認爲你有某種測試服務器?如果不是的話,你應該在PHP 5.3中設置一個並測試你的代碼。如果您的代碼完全通過了單元測試,測試會花費幾秒鐘,修復它也會很快,因爲單元測試會告訴您具體到哪裏查看。如果不是的話,那麼考慮在下一個版本之前將單元測試作爲優先考慮事項,同時完成所有這些工作,首先禁用E_DEPRECATED
警告並修復出現的所有內容,然後在有空時重新啓用它。您還可以運行全局查找和替換,以更輕鬆地修復錯誤。
一旦這些棄用的功能從PHP中刪除,使用它們的代碼將開始產生E_WARNING或致命錯誤,所以它將很難錯過;) – Mchl 2010-11-05 09:39:09
不錯,我不知道:)。 Thx分享。 – TheGrandWazoo 2010-11-05 09:40:01