2010-06-23 65 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

相关问题