长话短说,我正在使用大量使用 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);
}
...其中 old_call_user_func_array
是内置的 call_user_func_array
函数。
这是否可能,如果可能,如何实现?
最佳答案
您可以使用 rename_function它也在 APD 扩展中,所以如果你安装了 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);
}
关于php - 我可以扩展内置的 PHP 函数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8814211/