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生成静态文件的多种方法分享
Jul 17 PHP
探讨PHP中OO之静态关键字以及类常量的详解
Jun 07 PHP
PHP 使用MySQL管理Session的回调函数详解
Jun 21 PHP
php数据库备份还原类分享
Mar 20 PHP
PHP中的日期加减方法示例
Aug 21 PHP
字符串长度函数strlen和mb_strlen的区别示例介绍
Sep 09 PHP
php判断当前用户已在别处登录的方法
Jan 06 PHP
php检测图片主要颜色的方法
Jul 01 PHP
PHP中ID设置自增后不连续的原因分析及解决办法
Aug 21 PHP
Yii2数据库操作常用方法小结
May 04 PHP
PHP关键特性之命名空间实例详解
May 06 PHP
Laravel框架实现的上传图片到七牛功能详解
Sep 06 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
解析PHP函数array_flip()在重复数组元素删除中的作用
2013/06/27 PHP
JSON 编辑器实现代码
2009/12/06 Javascript
纯JS实现五子棋游戏兼容各浏览器(附源码)
2013/04/24 Javascript
JS 精确统计网站访问量的实例代码
2013/07/05 Javascript
javascript数组快速打乱重排的方法
2014/01/02 Javascript
简单易用的倒计时js代码
2014/08/04 Javascript
jQuery选择器源码解读(八):addCombinator函数
2015/03/31 Javascript
JavaScript编程中window的location与history对象详解
2015/10/26 Javascript
学习JavaScript设计模式之单例模式
2016/01/19 Javascript
JS实现支持Ajax验证的表单插件
2016/03/24 Javascript
Web程序员必备的7个JavaScript函数
2016/06/14 Javascript
JavaScript DOM节点操作实例小结(新建,删除HTML元素)
2017/01/19 Javascript
BootStrap中的Fontawesome 图标
2017/05/25 Javascript
ajax前台后台跨域请求处理方式
2018/02/08 Javascript
JsChart组件使用详解
2018/03/04 Javascript
webstorm中vue语法的支持详解
2018/05/09 Javascript
浅析vue给不同环境配置不同打包命令
2018/08/17 Javascript
详解如何创建并发布一个 vue 组件
2018/11/08 Javascript
vue设置导航栏、侧边栏为公共页面的例子
2019/11/01 Javascript
总结Python中逻辑运算符的使用
2015/05/13 Python
python字符串的常用操作方法小结
2016/05/21 Python
python字符串,数值计算
2016/10/05 Python
Python判断两个对象相等的原理
2017/12/12 Python
Python求平面内点到直线距离的实现
2020/01/19 Python
python如何安装下载后的模块
2020/07/03 Python
localStorage、sessionStorage使用总结
2017/11/17 HTML / CSS
美国顶级水上运动专业店:Marine Products
2018/04/15 全球购物
计算机专业毕业生求职信分享
2013/12/24 职场文书
班级安全教育实施方案
2014/02/23 职场文书
纪律教育学习心得体会
2014/09/02 职场文书
县委常委班子对照检查材料思想汇报
2014/09/28 职场文书
委托书的样本
2015/01/28 职场文书
2015圣诞节贺卡寄语
2015/03/24 职场文书
幼儿园圣诞节活动总结
2015/05/06 职场文书
幼儿园小班班务总结
2015/08/03 职场文书
使用opencv-python如何打开USB或者笔记本前置摄像头
2022/06/21 Python