PHP 函数call_user_func和call_user_func_array用法详解


Posted in PHP onMarch 02, 2014

call_user_func函数是当需要动态调用函数时,才使用的,这个函数有两种用法:
第一种是调用孤独的函数:

<?php
function funa($b,$c)
{
    echo $b;
    echo $c;
}
call_user_func('funa', "111","222");
call_user_func('funa', "333","444");
//显示 111 222 333 444
//大家有没有发现,这个用法有点像javascript中的call方法,嘿嘿
?>

第二种是调用类内部的函数:
<?php
class a {
    function b()
    {
        $args = func_get_args();
        $num = func_num_args();
        print_r($args);
        echo $num;
    }
}
call_user_func(array("a", "b"),"111","222");
?>

上面这个例子,自己运行一下看看结果是什么吧~嘿嘿~提示一下func_get_args()函数是获取传入到函数中的参数,返回一个数组,func_num_args()函数获取传入函数中的参数的个数。

下面再来看看call_user_func_array函数
这个函数也是当需要动态调用函数时用到的,它的用法和call_user_func函数比较像,只是参数传入的是数组。

<?php
function a($b, $c)
{
    echo $b;
    echo $c; 
}
call_user_func_array('a', array("111", "222"));
//显示 111 222
?>

call_user_func_array函数也可以调用类内部的方法的

<?php
Class ClassA
{
    function bc($b, $c) {
        $bc = $b + $c;
        echo $bc;
    }
}
call_user_func_array(array(‘ClassA','bc'), array(“111″, “222″));
//显示 333
?>

下面再看一个动态调用函数的例子:
<?php
function otest1 ($a)
{
     echo( '一个参数' );
}function otest2 ( $a, $b)
{
    echo( '二个参数' );
}
function otest3 ( $a ,$b,$c)
{
    echo( '三个啦' );
}
function otest (){
    $args = func_get_args();
    $num = func_num_args();
    call_user_func_array( 'otest'.$num, $args  );
}
otest("11");
otest("11","22");
otest("11","22","33");
?>

PHP 相关文章推荐
PHP has encountered an Access Violation at 7C94BD02解决方法
Aug 24 PHP
PHP 字符串分割和比较
Oct 06 PHP
header中Content-Disposition的作用与使用方法
Jun 13 PHP
PHP获取文件后缀名的三个函数
Oct 15 PHP
一个PHP二维数组排序的函数分享
Jan 17 PHP
学习php中的正则表达式
Aug 17 PHP
浅谈PHP中单引号和双引号到底有啥区别呢?
Mar 04 PHP
php字符集转换
Jan 23 PHP
实例分析基于PHP微信网页获取用户信息
Nov 24 PHP
实例介绍PHP中zip_open()函数用法
Feb 15 PHP
PHP创建文件及写入数据(覆盖写入,追加写入)的方法详解
Feb 15 PHP
PHP单例模式实例分析【防继承,防克隆操作】
May 22 PHP
PHP 字符串长度判断效率更高的方法
Mar 02 #PHP
PHP static局部静态变量和全局静态变量总结
Mar 02 #PHP
PHP代码优化之成员变量获取速度对比
Feb 28 #PHP
php递归方法实现无限分类实例代码
Feb 28 #PHP
PHP中常用的转义函数
Feb 28 #PHP
PHP中鲜为人知的10个函数
Feb 28 #PHP
php中调用其他系统http接口的方法说明
Feb 28 #PHP
You might like
javascript获得CheckBoxList选中的数量
2009/10/27 Javascript
ajax更新数据后,jquery、jq失效问题
2011/03/16 Javascript
javasciprt下jquery函数$.post执行无响应的解决方法
2014/03/13 Javascript
jquery队列queue与原生模仿其实现方法分享
2014/03/25 Javascript
node.js使用cluster实现多进程
2016/03/17 Javascript
Vue 过渡实现轮播图效果
2017/03/27 Javascript
Web制作验证码功能实例代码
2017/06/19 Javascript
Angular实现表单验证功能
2017/11/13 Javascript
JS模拟浏览器实现全局搜索功能
2019/09/11 Javascript
Vue 2.0双向绑定原理的实现方法
2019/10/23 Javascript
[52:15]2014 DOTA2国际邀请赛中国区预选赛5.21 HGT VS LGD-GAMING
2014/05/23 DOTA
[42:27]DOTA2上海特级锦标赛主赛事日 - 3 败者组第三轮#2Fnatic VS OG第三局
2016/03/05 DOTA
[01:03:59]2018DOTA2亚洲邀请赛3月30日 小组赛B组VGJ.T VS Secret
2018/03/31 DOTA
python实现ftp客户端示例分享
2014/02/17 Python
python连接mysql调用存储过程示例
2014/03/05 Python
python matplotlib 注释文本箭头简单代码示例
2018/01/08 Python
Python 在字符串中加入变量的实例讲解
2018/05/02 Python
一条命令解决mac版本python IDLE不能输入中文问题
2018/05/15 Python
python3编写ThinkPHP命令执行Getshell的方法
2019/02/26 Python
浅谈django 模型类使用save()方法的好处与注意事项
2020/03/28 Python
拿来就用!Python批量合并PDF的示例代码
2020/08/10 Python
Python离线安装各种库及pip的方法
2020/11/28 Python
真正了解CSS3背景下的@font face规则
2017/05/04 HTML / CSS
10分钟入门CSS3 Animation
2018/12/25 HTML / CSS
super()与this()的区别
2016/01/17 面试题
了解AppleTalk协议吗
2014/04/01 面试题
幼儿如何来做好自我评价
2013/11/05 职场文书
财务主管的岗位职责
2013/12/30 职场文书
魅力教师事迹材料
2014/01/10 职场文书
消防宣传口号
2014/06/16 职场文书
婚礼答谢礼品
2015/01/20 职场文书
行政助理岗位职责
2015/02/10 职场文书
预备党员转正意见
2015/06/01 职场文书
会议承办单位欢迎词
2015/09/30 职场文书
导游词之山东孔庙
2019/11/04 职场文书
NoSQL优缺点与MongoDB数据库简介
2022/06/05 MongoDB