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 设计模式之 单例模式
Dec 19 PHP
两个开源的Php输出Excel文件类
Feb 08 PHP
php中利用post传递字符串重定向的实现代码
Apr 21 PHP
PHP 利用AJAX获取网页并输出的实现代码(Zjmainstay)
Aug 31 PHP
php页面缓存ob系列函数介绍
Oct 18 PHP
php去除头尾空格的2种方法
Mar 16 PHP
php 运算符与表达式详细介绍
Nov 30 PHP
ajax+php实现无刷新验证手机号的实例
Dec 22 PHP
PHP代码重构方法漫谈
Apr 17 PHP
php json转换相关知识(小结)
Dec 21 PHP
YII2.0框架行为(Behavior)深入详解
Jul 26 PHP
Laravel使用模型实现like模糊查询的例子
Oct 24 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中require和include路径问题详解
2014/12/25 PHP
php中实现可以返回多个值的函数实例
2015/03/21 PHP
浅谈使用 Yii2 AssetBundle 中 $publishOptions 的正确姿势
2017/11/08 PHP
基于BootStrap Metronic开发框架经验小结【八】框架功能总体界面介绍
2016/05/12 Javascript
原生js封装二级城市下拉列表的实现代码
2016/06/16 Javascript
Boostrap实现的登录界面实例代码
2016/10/09 Javascript
微信开发 微信授权详解
2016/10/21 Javascript
原生js实现无限循环轮播图效果
2017/01/20 Javascript
Canvas实现放射线动画效果
2017/02/15 Javascript
Node.js设置CORS跨域请求中多域名白名单的方法
2017/03/28 Javascript
require.js中的define函数详解
2017/07/10 Javascript
vue 粒子特效的示例代码
2017/09/19 Javascript
使用nvm管理不同版本的node与npm的方法
2017/10/31 Javascript
JS实现的倒计时恢复按钮点击功能【可用于协议阅读倒计时】
2018/04/19 Javascript
jQuery实现的点击图片居中放大缩小功能示例
2019/01/16 jQuery
vue实现可视化可拖放的自定义表单的示例代码
2019/03/20 Javascript
浅谈使用nodejs搭建web服务器的过程
2020/07/20 NodeJs
[00:32]2018DOTA2亚洲邀请赛出场——LGD
2018/04/04 DOTA
Python使用Scrapy爬取妹子图
2015/05/28 Python
啥是佩奇?使用Python自动绘画小猪佩奇的代码实例
2019/02/20 Python
WxPython建立批量录入框窗口
2019/02/27 Python
python实现给微信指定好友定时发送消息
2019/04/29 Python
python 在某.py文件中调用其他.py内的函数的方法
2019/06/25 Python
如何理解python中数字列表
2020/05/29 Python
用python实现前向分词最大匹配算法的示例代码
2020/08/06 Python
html5构建触屏网站之touch事件介绍
2013/01/07 HTML / CSS
怎样声明接口
2014/09/19 面试题
中科软笔试题和面试题
2014/10/07 面试题
养殖项目策划书范文
2014/01/13 职场文书
美国探亲签证邀请信
2014/02/05 职场文书
房屋租赁授权委托书范本
2014/09/20 职场文书
2014年学生会工作总结
2014/11/07 职场文书
2014年教师业务工作总结
2014/12/19 职场文书
学习保证书
2015/01/17 职场文书
初中班主任教育随笔
2015/08/15 职场文书
2019暑期安全倡议书!
2019/06/27 职场文书