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静态调用非静态方法的应用分析
May 02 PHP
数组与类使用PHP的可变变量名需要的注意的问题
Jun 20 PHP
解析php扩展php_curl.dll不加载的解决方法
Jun 26 PHP
php初始化对象和析构函数的简单实例
Mar 11 PHP
ThinkPHP入口文件设置及相关注意事项分析
Dec 05 PHP
php计算两个整数的最大公约数常用算法小结
Mar 05 PHP
PHP模拟QQ登录的方法
Jul 29 PHP
Yii实现显示静态页的方法
Apr 25 PHP
php array_udiff_assoc 计算两个数组的差集实例
Nov 12 PHP
php 后端实现JWT认证方法示例
Sep 04 PHP
laravel框架select2多选插件初始化默认选中项操作示例
Feb 18 PHP
PHP中-&gt;和=&gt;的含义及使用示例解析
Aug 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
从零开始 教你如何搭建Discuz!4.1论坛
2006/07/07 PHP
php str_replace的替换漏洞
2008/03/15 PHP
通过5个php实例细致说明传值与传引用的区别
2012/08/08 PHP
PHP中使用CURL获取页面title例子
2015/01/07 PHP
php禁止某ip或ip地址段访问的方法
2015/02/25 PHP
PHP pthreads v3下的Volatile简介与使用方法示例
2020/02/21 PHP
Js-$.extend扩展方法使方法参数更灵活
2013/01/15 Javascript
我的Node.js学习之路(四)--单元测试
2014/07/06 Javascript
Jquery实现仿腾讯微博发表广播
2014/11/17 Javascript
JavaScript中实现依赖注入的思路分享
2015/01/15 Javascript
基于jQuery实现搜索关键字自动匹配功能
2020/03/26 Javascript
原生js实现下拉框功能(支持键盘事件)
2017/01/13 Javascript
jQuery中Datatables增加跳转到指定页功能
2017/02/08 Javascript
bootstrap中添加额外的图标实例代码
2017/02/15 Javascript
js模块加载方式浅析
2017/08/12 Javascript
vue动态路由配置及路由传参的方式
2018/05/23 Javascript
小程序显示弹窗时禁止下层的内容滚动实现方法
2019/03/20 Javascript
微信小程序学习笔记之目录结构、基本配置图文详解
2019/03/28 Javascript
Vue  webpack 项目自动打包压缩成zip文件的方法
2019/07/24 Javascript
nuxt框架中对vuex进行模块化设置的实现方法
2019/09/06 Javascript
浅谈使用nodejs搭建web服务器的过程
2020/07/20 NodeJs
[00:57]深扒TI7聊天轮盘语音出处5
2017/05/11 DOTA
[42:52]IG vs VGJ.T 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
RC4文件加密的python实现方法
2015/06/30 Python
python numpy 部分排序 寻找最大的前几个数的方法
2018/06/27 Python
Python之指数与E记法的区别详解
2019/11/21 Python
Mac中PyCharm配置Anaconda环境的方法
2020/03/04 Python
使用python接受tgam的脑波数据实例
2020/04/09 Python
HTML5中canvas中的beginPath()和closePath()的重要性
2018/08/24 HTML / CSS
服务宗旨标语
2014/07/01 职场文书
企业消防安全责任书
2014/07/23 职场文书
党员教师群众路线个人整改措施
2014/10/28 职场文书
结婚保证书(三从四德)
2015/02/26 职场文书
初三化学教学反思
2016/02/22 职场文书
学习师德师风的心得体会(2篇)
2019/10/08 职场文书
Promise静态四兄弟实现示例详解
2022/07/07 Javascript