2010-06-23 62 views
1

我想覆蓋已經在PHP中聲明的幾個函數。我正在使用的應用程序充滿了遺留代碼(包括對eval()的調用),因此只需替換代碼中調用函數的標識符可能不夠。如何在沒有APD的情況下覆蓋現有的PHP函數?

是否可以更改已經聲明的函數,而不使用PHP5中的Advanced PHP Debugger

+0

可能重複的[是否有可能替換(猴補丁)PHP函數?](http://stackoverflow.com/questions/530649/is-it-possible-to -replace-monkeypatch-php-functions) – Gordon 2010-06-23 10:00:48

回答

2

是,通過

這是一個PECL擴展,可以通過PEAR安裝替換函數定義。但請記住,重新聲明函數並不能取代正確的重構。你只是在互相交換一個邪惡。

另見Is it possible to replace (monkeypatch) PHP functions?

+0

這需要runkit擴展,它可以由PECL安裝。 – 2010-06-23 09:55:07

+0

這只是一個臨時的預防措施。我不會重構這種僞裝成PHP代碼的危險,但我會逐頁完整地重寫它。 – Tom 2010-06-23 10:19:41

0

常見問題 - 爲什麼?你期望達到什麼目的?

包括調用的eval()

你是在暗示你可能會寫自己的eval()函數?祝你好運!或者你只是想禁用某些功能?如果是後者,那麼你怎麼知道你的假人替換不會導致功能問題?如果您只想禁用speficic函數,那麼您可以從php.ini文件中執行此操作。

OTOH,如果是我和我的工作封裝/替換功能,我只用findsed改寫文件,然後添加一個auto-prepend包括文件,其中包括相關的函數定義。 (實際上,我過去完全是這樣做的)。

HTH

C.

+0

我有一個函數,讓我們說從PHP腳本中調用的'strtoupper'有時候是一個函數,有時候使用'eval()',所以我不能真正嗅出所有調用的來源(一些函數調用來來自數據庫,有些是通過連接字符串來生成函數名稱)。是的,這是很糟糕的。 – Tom 2010-06-24 10:36:19

相關問題