【web 开发基础】PHP 自定义回调函数之 call_user_func_array() (36)
前言
从上一篇文章中我们了解到,回调函数是将一个函数作为参数传递到调用的函数中。如果在函数的格式说明中出现 callback 类型的参数,则该函数就是回调函数。虽然可以使用变量函数去声明自己的回调函数,不过我们通常大多还是会通过借助 call_user_func_array() 函数去实现。通过借助 call_user_func_array()来实现函数的回调,使得回调的方式更加灵活,使用更加方便。call_user_func_array()函数时 PHP 的一个内置函数,call_user_func_array()本身就是一个回调函数,使用 call_user_func_array()来实现函数的回调的语法格式如下:
从上面的语法格式可以看出,call_user_func_array()函数有两个参数,第一个参数因为使用伪类型 callback, 所以这个参数需要传递的是一个字符串,表示要调用的函数名;第二个参数则是一个数组类型的参数,表示参数列表,按照顺序依次会对应地传递给要调用的函数。
编程实践
下面我们通过实例来体验一下 call_user_func_array()函数的用法:声明一个 fun()函数通过回调的方式去调用该函数
执行结果如下图所示:
上面的例子中第 14 行代码,通过系统函数 call_user_func_array() 调用自己定义的函数 fun(),将函数 fun() 的名称字符串传递给了 call_user_func_array() 函数中的第一个参数,第二个参数则需要的是一个数组,数组中的元素个数必须和 fun()函数的参数列表的个数相同。因为这个数组参数中的每个元素的值都会通过 call_user_func_array() 函数 ,按照顺序依次传递给回调到的函数 fun()参数列表对应的参数中。所以我们可以将前面通过变量函数实现的自定义回调函数,改成借助 call_user_func_array() 函数的方式进行实现。
改进代码如下:
执行结果如下:
从执行结果可以看出,自定义的函数 filter()内部,将原来的变量函数位置修改写成借助 call_user_func_array() 函数的调用方式进行回调自定义函数,而函数 filter()的应用方式没有任何发生变化
版权声明: 本文为 InfoQ 作者【迷彩】的原创文章。
原文链接:【http://xie.infoq.cn/article/b9f158e6653366b6cdb34d9ea】。文章转载请联系作者。
评论