如何在没有APD的情况下覆盖现有的PHP函数?

如何在没有APD的情况下覆盖现有的PHP函数?,php,Php,我想覆盖几个已经在PHP中声明的函数。我正在使用的应用程序充满了遗留代码(包括对eval())的调用),因此仅替换代码中调用函数的标识符可能不够 是否可以更改已声明的函数,而不使用PHP5中的?是,使用 -用新的实现替换函数定义 它是一个PECL扩展,可以通过PEAR安装。但请记住,重新定义函数并不能代替适当的重构。你只是在用一种罪恶换另一种罪恶 另请参见常见问题-为什么?你期望实现什么 包括对eval()的调用 您是否建议编写自己的eval()函数?祝你好运还是只想禁用某些功能?如果是后者

我想覆盖几个已经在PHP中声明的函数。我正在使用的应用程序充满了遗留代码(包括对
eval()
)的调用),因此仅替换代码中调用函数的标识符可能不够

是否可以更改已声明的函数,而不使用PHP5中的?是,使用

  • -用新的实现替换函数定义
它是一个PECL扩展,可以通过PEAR安装。但请记住,重新定义函数并不能代替适当的重构。你只是在用一种罪恶换另一种罪恶


另请参见常见问题-为什么?你期望实现什么

包括对eval()的调用

您是否建议编写自己的eval()函数?祝你好运还是只想禁用某些功能?如果是后者,那么您如何知道您的假人更换不会导致功能问题?如果您只想禁用特定功能,那么可以从文件中执行

OTOH,如果是我,并且我有工作包装器/替换函数,我只需要使用和重写文件,然后添加一个包含相关函数定义的include文件。(事实上,我过去也确实这样做过)


C.

这需要runkit扩展,可以由PECL安装。这只是一种临时预防措施。我不会伪装成PHP代码来重构这个危险,但我会完全一页一页地重写它。我有一个函数的可能副本,比如说
strtoupper
,它有时作为函数从PHP脚本调用,有时使用
eval()
,所以我无法真正嗅出所有调用的来源(有些函数调用来自数据库,有些是通过串接字符串来生成函数名的)。是的,就是这么糟糕。