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

标签 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);
}

...其中 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/

相关文章:

php - 我希望搜索结果显示在列中,但只有文本显示

php - 使用 PHP 列出目录中的所有图像

javascript - 在 Mixpanel 中在 PHP 库和 JS 库之间工作

r - 通过随机样本增加加权平均值

php - Laravel 合并数组

java - 如何在 Android 中多次调用一个方法

R 编程,使用自定义脚本(针对每个 i)进行逐行数据帧计算以解决 "bridge game"

java - 由java中的所有类扩展的默认类

Java 扩展 vs 对象引用?

jquery - $.extend() 与函数