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 20 PHP
php session安全问题分析
Jun 24 PHP
PHP setTime 设置当前时间的代码
Aug 27 PHP
织梦sitemap地图实时推送给百度的教程
Aug 03 PHP
学习php设计模式 php实现访问者模式(Visitor)
Dec 07 PHP
CodeIgniter配置之config.php用法实例分析
Jan 19 PHP
PHP的Yii框架中使用数据库的配置和SQL操作实例教程
Mar 17 PHP
php指定长度分割字符串str_split函数用法示例
Jan 30 PHP
PHP实现的分页类定义与用法示例
Jul 05 PHP
如何利用预加载优化Laravel Model查询详解
Aug 11 PHP
浅析PHP类的反射来实现依赖注入过程
Feb 06 PHP
Laravel中GraphQL接口请求频率实战记录
Sep 01 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
CodeIgniter框架中_remap()使用方法2例
2014/03/10 PHP
使用PHP破解防盗链图片的一个简单方法
2014/06/07 PHP
yii实现使用CUploadedFile上传文件的方法
2015/12/28 PHP
php生成验证码,缩略图及水印图的类分享
2016/04/07 PHP
PHPExcel笔记, mpdf导出
2016/05/03 PHP
php原生数据库分页的代码实例
2019/02/18 PHP
在JavaScript中使用inline函数的问题
2007/03/08 Javascript
JavaScript的递归之递归与循环示例介绍
2013/08/05 Javascript
javascript基本包装类型介绍
2015/04/10 Javascript
谈谈Jquery中的children find 的区别有哪些
2015/10/19 Javascript
Javascript 闭包详解及实例代码
2016/11/30 Javascript
基于JQuery实现的跑马灯效果(文字无缝向上翻动)
2016/12/02 Javascript
使用vue.js2.0 + ElementUI开发后台管理系统详细教程(二)
2017/01/21 Javascript
jquery实现简单实用的轮播器
2017/05/23 jQuery
使用JS获取SessionStorage的值
2018/01/12 Javascript
Vue拖拽组件开发实例详解
2018/05/11 Javascript
如何用Node写页面爬虫的工具集
2018/10/26 Javascript
JS删除String里某个字符的方法
2021/01/06 Javascript
[01:55]TI9显影之尘系列 - Evil Geniuses
2019/08/22 DOTA
python使用multiprocessing模块实现带回调函数的异步调用方法
2015/04/18 Python
Python判断列表是否已排序的各种方法及其性能分析
2016/06/20 Python
老生常谈python中的重载
2018/11/11 Python
python2.7实现邮件发送功能
2018/12/12 Python
Python3将ipa包中的文件按大小排序
2020/04/17 Python
基于Python模拟浏览器发送http请求
2020/11/06 Python
自荐信不宜过于夸大
2013/11/06 职场文书
酒店办公室文员岗位职责
2013/12/18 职场文书
《雕塑之美》教学反思
2014/04/24 职场文书
纪律教育月活动总结
2014/08/26 职场文书
党的群众路线教育实践活动个人对照检查材料(医生)
2014/11/05 职场文书
钓鱼岛事件感想
2015/08/11 职场文书
教师远程培训心得体会
2016/01/09 职场文书
八年级语文教学反思
2016/03/03 职场文书
完美解决golang go get私有仓库的问题
2021/05/05 Golang
MySQL优化之如何写出高质量sql语句
2021/05/17 MySQL
万能密码的SQL注入漏洞其PHP环境搭建及防御手段
2021/09/04 SQL Server