註冊引用新的返回值分配新的返回值在PHP 5.3已經deprecated。因此,PHP 5.3,並通過引用
$obj =& new Foo();
現在拋出一個E_DEPRECATED
錯誤。
當升級了大量的遺留代碼的大型應用程序到5.3,這導致了很多不必要的公告。
作爲此問題的潛在解決方案,我正在考慮使用正則表達式來查找並替換=& new
與= new
的所有實例。例如,下面會發現所有的PHP文件,並全殲=& new
所有實例:
find ./ -name '*.php' | xargs perl -p -i -e 's/=(\s*)&(\s*)?new\b/= new/g'
尋找答案,以下幾個問題:
- 將它工作得很好?我可能遇到什麼潛在問題?
- 如果不是,其中具有
= new
替換=& new
的代碼的例子將在PHP 5.3改變的行爲。 - 任何流行的庫的例子都會導致一個問題。
- 你還有什麼其他想法來處理大量的
=& new
?
我懷疑這會工作得很好,但尋找邊緣情況下,我可能會遇到麻煩。是的,我知道我可以更改錯誤報告設置。但我不想隱藏通知,我想修復它們。
E_DEPRECATED屬於通知類,而不是錯誤。我不確定你需要趕緊修復它(magic_quotes被聲明在PHP 4.2左右)。至於正則表達式:你應該在`new`後面添加`\ b`,否則這是一種可行的重寫方法。但是你只能測試它是否會損害預期的處理邏輯(儘管不太可能)。 – mario 2011-01-12 20:19:24
@mario E_DEPRECATED只是一個錯誤*級別*。無論哪種方式提及它都是適當的。不過\ b好點。 – mfonda 2011-01-12 20:24:28