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 无限级分类,超级简单的无限级分类,支持输出树状图
Jun 29 PHP
ThinkPHP框架任意代码执行漏洞的利用及其修复方法
Jul 04 PHP
PHP高手需要要掌握的知识点
Aug 21 PHP
一张表搞清楚php is_null、empty、isset的区别
Jul 07 PHP
php多线程实现方法及用法实例详解
Oct 26 PHP
微信支付开发交易通知实例
Jul 12 PHP
PHP 常用时间函数资料整理
Oct 22 PHP
php 函数使用可变数量的参数方法
May 02 PHP
PHP实现删除多重数组对象属性并重新赋值的方法
Jun 07 PHP
Laravel框架模板继承操作示例
Jun 11 PHP
laravel 5.3 单用户登录简单实现方法
Oct 14 PHP
4种Windows系统下Laravel框架的开发环境安装及部署方法详解
Apr 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 冒泡排序 交换排序法
2011/05/10 PHP
php中Ctype函数用法详解
2014/12/09 PHP
php中heredoc与nowdoc介绍
2014/12/25 PHP
PHP通过bypass disable functions执行系统命令的方法汇总
2018/05/02 PHP
JS完成代码前最好对其做5件事
2013/04/07 Javascript
YUI模块开发原理详解
2013/11/18 Javascript
nodejs文件操作模块FS(File System)常用函数简明总结
2014/06/05 NodeJs
js获取时间并实现字符串和时间戳之间的转换
2015/01/05 Javascript
js实现同一页面多个不同运动效果的方法
2015/04/10 Javascript
javascript判断变量是否有值的方法
2015/04/20 Javascript
使用plupload自定义参数实现多文件上传
2016/07/19 Javascript
微信小程序 swiper组件轮播图详解及实例
2016/11/16 Javascript
基于JS脚本语言的基础语法详解
2017/07/22 Javascript
基于VUE的v-charts的曲线显示功能
2019/10/01 Javascript
微信小程序如何实现点击图片放大功能
2020/01/21 Javascript
vue根据条件不同显示不同按钮的操作
2020/08/04 Javascript
js 将多个对象合并成一个对象 assign方法的实现
2020/09/24 Javascript
ES2020让代码更优美的运算符 (?.) (??)
2021/01/04 Javascript
python基础教程之popen函数操作其它程序的输入和输出示例
2014/02/10 Python
如何搜索查找并解决Django相关的问题
2014/06/30 Python
Python的Bottle框架中返回静态文件和JSON对象的方法
2015/04/30 Python
python指定写入文件时的编码格式方法
2018/06/07 Python
Django 实现admin后台显示图片缩略图的例子
2019/07/28 Python
python数据预处理方式 :数据降维
2020/02/24 Python
Python tcp传输代码实例解析
2020/03/18 Python
Allsole美国/加拿大:英国一家专门出售品牌鞋子的网站
2018/10/21 全球购物
幼儿园元旦亲子活动方案
2014/02/17 职场文书
人事部经理岗位职责
2014/03/07 职场文书
投标诚信承诺书
2014/05/26 职场文书
小学校长汇报材料
2014/08/20 职场文书
大学毕业生自我评价
2015/03/02 职场文书
公司处罚决定书
2015/06/24 职场文书
2019员工保密协议书(3篇)
2019/09/23 职场文书
关于Javascript闭包与应用的详解
2021/04/22 Javascript
python获取字符串中的email
2022/03/31 Python
vue报错function () { [native code] },无法出现我们想要的内容 Unknown custom element
2022/04/11 Vue.js