PHP 中 call_user_func() 函数 和 call_user_func_array() 函数都是回调函数,在写接口的时候经常会用到,但是他们有什么区别呢?

它们的第一个参数都是被调用的回调函数,call_user_func() 还可以有多个参数,它们都是回调函数的参数,call_user_func_array() 只有两个参数,第二个参数是要被传入回调函数的数组,这个数组得是索引数组

所以它们最大的区别就是:

  • 如果传递一个数组给 call_user_func_array()数组的每个元素的值都会当做一个参数传递给回调函数,数组的 key 回调掉。
  • 如果传递一个数组给 call_user_func()整个数组会当做一个参数传递给回调函数,数字的 key 还会保留住。

比如有个如下的回调函数:

function test_callback(){
$args = func_get_args();
$num = func_num_args();
echo $num."个参数:";
echo "<pre>";
print_r($args);
echo "</pre>";
}

  

然后我们分别使用 call_user_func 函数 和 call_user_func_array 函数进行回调:

$args = array (
'foo' => 'bar',
'hello' => 'world',
0 => 123
); call_user_func('test_callback', $args);
call_user_func_array('test_callback', $args);

  

最后输出结果:

1 个参数:
Array
(
[0] => Array
(
[foo] => bar
[hello] => world
[0] => 123
)
) 3个参数:
Array
(
[0] => bar
[1] => world
[2] => 123
)

  

PHP 中 call_user_func 函数 和 call_user_func_array 函数的区别的更多相关文章

  1. array_walk函数与call_user_func_array函数

    一, php手册的解释: call_user_func_array - 调用回调函数,并把一个数组参数作为回调函数的参数  说明: mixed  call_user_func_array  ( cal ...

  2. PHP中的回调函数和匿名函数

    html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,bi ...

  3. php中call_user_func 与 call_user_func_array的使用

    call_user_func()是利用回调函数处理字符串,call_user_func_array是利用回调函数处理数组. // 1. 调用自定义函数 function test($a, $b) { ...

  4. php中代码执行&&命令执行函数

    转自i春秋 1.eval()函数 #传入的参数必须为PHP代码,既需要以分号结尾. #命令執行:cmd=system(whoami); #菜刀连接密码:cmd <?php @eval($_POS ...

  5. Java实现Excel中的NORMSDIST函数和NORMSINV函数

    由于工作中需要将Excel中的此两种函数转换成java函数,从而计算内部评级的资本占用率和资本占用金额.经过多方查阅资料和整理,总结出如下两个转换方法 标准正态分布累计函数NORMSDIST: pub ...

  6. javascript中需要自行定义的函数

    1.toString()与String() 使用方式:x.toString();-----String(x); String是万能的方法,而x.toString()则有局限性,无法将undefined ...

  7. 跟着百度学PHP[5]函数篇2-PHP中的特殊形式的函数

    目录...................................................... .00x1 可变函数 在PHP里面如果说将“函数名称”赋予字符串类型的变量.在调用这个 ...

  8. Oracle中的CHR()函数与ASCII()函数

    工作中经常会处理一些因特殊字符而导致的错误,如上周我就遇到了因为换行符和回车符导致的数据上报的错误,这种错误比较难以发现,通常是由于用户的输入习惯导致的,有可能数据极少,就那么几行错误从而导致整个数据 ...

  9. angular中的compile和link函数

    angular中的compile和link函数 前言 这篇文章,我们将通过一个实例来了解 Angular 的 directives (指令)是如何处理的.Angular 是如何在 HTML 中找到这些 ...

随机推荐

  1. random_select

    package sorttest;   //expected and worst running time is O(n),asuming that the elements are distinct ...

  2. IOS safari 浏览器 时间乱码(ios时间显示NaN) 问题解决

    问题一: 项目中遇到一个关于日期时间在ios中乱码在安卓中安然无恙的问题,焦躁了半天 问题如上图,通过用户选择的时间和当天的天数相加然后在ios上就是乱码 这个界面运用了日期类型的计算,当我们用Jav ...

  3. mmap 操作

    mmap 功能描述: mmap将一个文件或者其它对象映射进内存.文件被映射到多个页上,如果文件的大小不是所有页的大小之和,最后一个页不被使用的空间将会清零.munmap执行相反的操作,删除特定地址区域 ...

  4. C高级第二次PTA作业

    6-7 删除字符串中数字字符 1.设计思路: (1)算法: 第一步:定义一个字符数组item,输入一个字符串赋给字符数组item.调用函数delnum, 第二步:在函数delnum中定义循环变量i=0 ...

  5. 【02_258】Add Digits

    Add Digits Total Accepted: 49702 Total Submissions: 104483 Difficulty: Easy Given a non-negative int ...

  6. sudo: sorry, you must have a tty to run sudo

    使用ssh进行无密访问,并发送执行命令的时候遇到了如题的错误 执行命令ssh user@host "sudo rm /data/test,txt" sudo: sorry, you ...

  7. 添加aimate动画

    .page3_ship{ background:url(../image/boat_02.png) 0 center no-repeat; background-size: 486px 385px; ...

  8. ajax遍历数组对象

    success: function(data){ console.log(data); for (var warn in data) { alert(data[warn].kh_lxr); } } d ...

  9. 安装Nmon方法

    1. 登录IBM官方网站(http://nmon.sourceforge.net/pmwiki.php?n=Site.Download)下载相应版本的nmon工具:nmon_linux_14g.tar ...

  10. 大型网站系统与Java中间件实践读书笔记

    转载:http://blog.csdn.net/ioscodelover/article/details/45047869 1.分布式系统相对集中式而言,是指多台计算机互相通过消息通信进行协作而对外提 ...