对比了半天还是没发现有什么太大的区别,可能是我没有找到体现出使用call_user_func_array()这个函数的优势的场景。
谁知道的告知下。
给个介绍的文章链接也行~
function foo($a,$b){
return 2*(intval($a)+intval($b));
}
function bar($a,$b){
return 3*foo($a,$b);
}
echo bar(3,2);
function foo($a,$b){
return 2*(intval($a)+intval($b));
}
function bar(){
return 3*call_user_func_array('foo', func_get_args());
}
echo bar(3,2);
参考一楼大拿给的,的确不错:
function playVideo($video)
{
echo '哥在用用Video看电影-',$video;
}
function playAudio($artist,$music)
{
echo '哥在用Mp3听',$artist,'的歌-',$music;
}
function play()
{
$args = func_get_args();
$functionName = array_shift($args);
call_user_func_array( 'play'.$functionName, $args );
}
play('Video','《功夫》');
echo '<br>';
play('Audio', 'Jay','《简单爱》');
很多场景是这样的:
1、你要调用的函数名是未知的
2、要调用函数的参数类型及个数也是未知的
因为未知,所以得用call_user_func_array这样的函数。
一个应用场景:
定时任务类需要定时运行一个函数,则接口就可以类似这样设计:
/**
* 在$run_time时刻运行$call_back
*/
function task_add($run_time, $call_back, $param_arr){
while(1){
if(time()>=$run_time){
call_user_func_array($call_back, $param_arr);
return;
}
sleep(1);
}
}
$call_back和$param_arr是用户传递的,可以是任意函数任意参数。这种场景下很难直接调用函数,使用call_user_func_array就非常方便。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。