可以向php中的任何函数添加回调吗?

可以向php中的任何函数添加回调吗?,php,callback,Php,Callback,我可以向php本机函数添加回调吗 on('json_encode',function(){ echo "encoding something"; }); 如果是,是否可以添加post和预回调? 谢谢。不,您必须重写自己的包装函数。比如: function my_json_encode($data) { if (function_exists("json_encode_pre_callback")) { json_encode_pre_callback();

我可以向php本机函数添加回调吗

on('json_encode',function(){
    echo "encoding something";
});
如果是,是否可以添加post和预回调?
谢谢。

不,您必须重写自己的包装函数。比如:

function my_json_encode($data) {
    if (function_exists("json_encode_pre_callback")) {
        json_encode_pre_callback();
    }
    $return = json_encode($data);
    if (function_exists("json_encode_post_callback")) {
        json_encode_post_callback($return);
    }
    return $return;
}
或者,使用回调作为参数:

function my_json_encode($data, $pre = null, $post = null) {
    if (is_callable($pre)) {
        $pre();
    }
    $return = json_encode($data);
    if (is_callable($post)) {
        $post($return);
    }
    return $return;
}

my_json_encode(
    $data,
    function(){echo "doing encode";},
    function($d){echo "done encode, value 1 is $d[1]";}
)

不,最好的方法是调用PHP本机函数的用户定义函数


尽管可以使用override_函数see docs重新定义PHP本机函数,但请注意apd扩展是。

No!只有当函数的PHP文档说它接受回调参数时,例如array_filter或USORT,这可以使它接受函数名作为参数,而不是硬编码的前回调和后回调。这是事实,最近的PHP匿名函数更易于实现。我会编辑它。你好!我知道你在做什么。但这对我不起作用。我需要一些不需要改变函数名的东西。我想在脚本的开头添加一个文件,并向某些函数添加回调。不过还是要谢谢你!好吧,我想如果我贴了一个回答说不的话,那就不会有多大帮助了。所以我说不,并提供了一个解决办法。嘿,谢谢你的回答!我知道这个功能,但问题是我必须让我的用户安装apd扩展。我不想那样。谢谢你,安威!同样,这也是一个外部库。