我想覆盖已经在PHP中声明的几个函数。我正在使用的应用程序充满了遗留代码(包括对eval()
的调用),因此只需替换代码中调用函数的标识符可能不够。如何在没有APD的情况下覆盖现有的PHP函数?
是否可以更改已经声明的函数,而不使用PHP5中的Advanced PHP Debugger?
我想覆盖已经在PHP中声明的几个函数。我正在使用的应用程序充满了遗留代码(包括对eval()
的调用),因此只需替换代码中调用函数的标识符可能不够。如何在没有APD的情况下覆盖现有的PHP函数?
是否可以更改已经声明的函数,而不使用PHP5中的Advanced PHP Debugger?
是,通过
runkit_function_redefine
- 用一个新的实现这是一个PECL扩展,可以通过PEAR安装替换函数定义。但请记住,重新声明函数并不能取代正确的重构。你只是在互相交换一个邪恶。
这需要runkit扩展,它可以由PECL安装。 – 2010-06-23 09:55:07
这只是一个临时的预防措施。我不会重构这种伪装成PHP代码的危险,但我会逐页完整地重写它。 – Tom 2010-06-23 10:19:41
常见问题 - 为什么?你期望达到什么目的?
包括调用的eval()
你是在暗示你可能会写自己的eval()函数?祝你好运!或者你只是想禁用某些功能?如果是后者,那么你怎么知道你的假人替换不会导致功能问题?如果您只想禁用speficic函数,那么您可以从php.ini文件中执行此操作。
OTOH,如果是我和我的工作封装/替换功能,我只用find和sed改写文件,然后添加一个auto-prepend包括文件,其中包括相关的函数定义。 (实际上,我过去完全是这样做的)。
HTH
C.
的我有一个函数,让我们说从PHP脚本中调用的'strtoupper'有时候是一个函数,有时候使用'eval()',所以我不能真正嗅出所有调用的来源(一些函数调用来来自数据库,有些是通过连接字符串来生成函数名称)。是的,这是很糟糕的。 – Tom 2010-06-24 10:36:19
可能重复的[是否有可能替换(猴补丁)PHP函数?](http://stackoverflow.com/questions/530649/is-it-possible-to -replace-monkeypatch-php-functions) – Gordon 2010-06-23 10:00:48