我可以扩展内置的PHP函数吗?

aro*_*oth 2 php function extend

长话短说我正在使用遗留的代码库,大量使用PHP的内置call_user_func_array函数.我试图让它与PHP 5.3一起工作(从5.2升级),但遇到了这里描述的问题(在"传递非数组"部分):

http://sixohthree.com/1486/migrating-to-php-5-3-call_user_func_array

简而言之,问题是在PHP版本5.2和5.3之间,这个函数的优点已被更改,因此它基本上什么都不做,NULL如果第二个参数不是正确的数组/对象/关联数组则返回.5.2没有这样做,因此我正在使用的代码库不会确保它传递正确类型的参数.这会导致问题.

要修复它,我可以按照博客文章call_user_func_array中的说明搜索代码库中的每一个调用并修补它们,但这将非常繁琐.或者,我注意到PHP有一个内置的override_function API调用,可以用来覆盖内置函数.这很方便,但我想做的更像是扩展内置功能.

理想情况下,我希望能够call_user_func_array用大致类似的东西替换实现:

function call_user_func_array($method, $params) {
    $params = is_array($params) ? $params : array($params);
    return old_call_user_func_array($method, $params);
}
Run Code Online (Sandbox Code Playgroud)

...... old_call_user_func_array内置call_user_func_array功能在哪里

这是可能的,如果是的话,怎么样?

Pau*_*aul 5

您可以使用也在APD扩展中的rename_function,因此如果您安装了override_function,则应该已经拥有它:

rename_function('call_user_func_array', 'old_user_func_array');

function call_user_func_array($method, $params) {
    $params = is_array($params) ? $params : array($params);
    old_call_user_func_array($method, $params);
}
Run Code Online (Sandbox Code Playgroud)