call_user_func_array用法大屏查看

发布于:2017年03月15日 已被阅读

在ecmall和discuz的源码中大量使用这个call_user_func_array,不得不认真看看它的使用方法了。简单来讲,就是调用一个函数或者一个类中的某个成员函数。手册上的原型是这样的:

mixed call_user_func_array ( callable $callback , array $param_arr )

第一个参数是函数名,第二个参数是参数数组,返回值是大杂烩。

还是写个demo看看了:

<?phpfunction a($b, $c){echo $b;echo $c;}call_user_func_array('a', array("111", "222"));//显示 111 222?>
<?phpClass ClassA{function bc($b, $c) {$bc = $b + $c;echo $bc;}}call_user_func_array(array('ClassA','bc'), array("111", "222"));//显示 333?>

在ecmall的includes\ecapp.base.php里面有一段:

/**  *    显示错误警告  *  *    @author    Garbin  *    @param    none  *    @return    void  */ function show_warning() {     $args = func_get_args();     call_user_func_array('show_warning', $args); }

实际上这个show_message()函数最终是eccore/controller/messages.base.php文件中定义的:

/**    * send a system warning message    *    * @param string $msg    */function show_warning ($msg){    $a = _trigger_message(func_get_args());     _message(serialize($a), E_USER_WARNING);}

这里的func_get_args将变量数组取出来,也就是得到上面的$args了。

最后扯几句闲话,从初学者的角度来讲,PHP的强大之处在于它的灵活性,变量可以作为变量名,也可以作为函数名,直到PHP运行前,你都不知道调用的是那个类的那个方法,这是C++和Java无法想象的。也正因为这种灵活性,使得初学者举步维艰。因为在IDE中,你无法F3定位到函数的声明,够折磨人的。


最新发布
linux下svn提交忽略某些文件... (173)
使用批处理来批量更新、提交SVN... (135)
linux查看目录文件大小命令 (145)
linux tar打包压缩排除某个... (134)
Linux tar压缩和解压 (192)
SVN子命令add用法浅析 (130)
热门博文
网友FBI探案:马蓉iPad惊人发现... (43343)
霍金携手俄罗斯富豪耗资1亿美元寻找外... (4746)
如何才能查看PHP内置函数源代码... (1209)
微信支付开发当前URL未注册的解决方... (573)
《谁为爱情买单》中的经典面试 ... (441)
让虚拟主机也用上SVN:适用于个人的... (394)
精华博文
[推荐]Centos7 安装配置 SVN (157)
easyswoole框架安装 (173)
php开启pecl的支持(推荐) (157)
1-10个恋爱表现:男朋友爱你程度到... (164)
女生喜欢你的10个程度,到第六个就可... (141)
Eclipse 没有Server选项... (211)
友情链接
我来忙 (110)