浅析PHP中call user func()函数及如何使用call user func调用自定义函数


Posted in PHP onNovember 05, 2015

UCenter源代码里有一个函数call_user_func,开始以为是自己定义的函数,结果到处都找不到。后来才知道call_user_func是PHP的内置函数,该函数允许用户调用直接写的函数并传入一定的参数,下面总结下这个函数的使用方法。

call_user_func函数类似于一种特别的调用函数的方法,使用方法如下:

<?php
function nowamagic($a,$b) 
{ 
 echo $a; 
 echo $b; 
} 
call_user_func('nowamagic', "",""); 
call_user_func('nowamagic', "",""); 
//显示  
?>

调用类内部的方法比较奇怪,居然用的是array,不知道开发者是如何考虑的,当然省去了new,也挺有新意的:

<?php
class a { 
 function b($c) 
 { 
  echo $c; 
 } 
} 
call_user_func(array("a", "b"),""); 
//显示 
?>

call_user_func_array函数和call_user_func很相似,只不过是换了一种方式传递了参数,让参数的结构更清晰:

<?php
function a($b, $c) 
{ 
 echo $b; 
 echo $c; 
} 
call_user_func_array('a', array("", "")); 
//显示 
?>

call_user_func_array函数也可以调用类内部的方法的:

<?php
Class ClassA 
{ 
function bc($b, $c) { 
  $bc = $b + $c; 
echo $bc; 
} 
} 
call_user_func_array(array('ClassA','bc'), array("", "")); 
//显示 
?>

call_user_func函数和call_user_func_array函数都支持引用,这让他们和普通的函数调用更趋于功能一致:

<?php
function a($b) 
{ 
 $b++; 
} 
$c = ; 
call_user_func('a', $c); 
echo $c;//显示 
call_user_func_array('a', array($c)); 
echo $c;//显示 
?>
另外,call_user_func函数和call_user_func_array函数都支持引用。
view sourceprint?
<?php
function increment(&$var)
{
 $var++;
}
$a = ;
call_user_func('increment', $a);
echo $a; // 
call_user_func_array('increment', array(&$a)); // You can use this instead
echo $a; // 
?>

下面给大家介绍使用call_user_func调用自定义函数

使用call_user_func函数,通过传入字符串函数,可以调用自定义函数,并且支持引用。

1.mixed call_user_func ( callable $callback [, mixed $parameter [, mixed $... ]] )

调用第一个参数提供的自定义函数,后面的参数为自定义函数的参数,返回自定义函数的结果

function say($word)
{
 echo $word;
}
call_user_func('say', 'hello world'); //hello world
当然也可以调用类中的方法:
class A {
 function say($word = '')
 {
  echo $word;
 }
} 
$a = new A(); //注意,必须是要实例化的,除非是static
call_user_func(array($a, 'say'), 'hello world'); //hello world

2.mixed call_user_func_array ( callable $callback , array $param_arr )

话说call_user_func_array和call_user_func函数功能一样,只是调用参数时有点区别:

function a($word)
{
 echo $word;
}
class A {
 function say($word = '')
 {
  echo $word;
 }
}
call_user_func_array('a', array('hello world')); //hello world
$a = new A(); //注意,必须是要实例化的,除非是static
call_user_func_array(array($a, 'say'), array('hello world')); //hello world

注明:另外类似的两个函数是call_user_method 和call_user_method_array() 不过在PHP4.1后就停用废弃了

PHP 相关文章推荐
多文件上传的例子
Oct 09 PHP
php递归删除目录下的文件但保留的实例分享
May 10 PHP
thinkphp的静态缓存用法分析
Nov 29 PHP
php+xml实现在线英文词典查询的方法
Jan 23 PHP
php使用ob_flush不能每隔一秒输出原理分析
Jun 02 PHP
隐性调用php程序的方法
Jun 13 PHP
php抓取并保存网站图片的实现代码
Oct 28 PHP
学习php设计模式 php实现模板方法模式
Dec 08 PHP
浅谈PHP接入(第三方登录)QQ登录 OAuth2.0 过程中遇到的坑
Oct 13 PHP
PHP实现在对象之外访问其私有属性private及保护属性protected的方法
Nov 20 PHP
PHP工厂模式简单实现方法示例
May 23 PHP
使用Entrust扩展包在laravel 中实现RBAC的功能
Mar 16 PHP
php无限分类使用concat如何实现
Nov 05 #PHP
PHP json_encode() 函数详解及中文乱码问题
Nov 05 #PHP
PHP explode()函数的几个应用和implode()函数有什么区别
Nov 05 #PHP
双冒号 ::在PHP中的使用情况
Nov 05 #PHP
php根据用户语言跳转相应网页
Nov 04 #PHP
非常全面的php日期时间运算汇总
Nov 04 #PHP
php对文件夹进行相关操作(遍历、计算大小)
Nov 04 #PHP
You might like
咖啡风味 世界咖啡主要分布分布 咖啡的生长要求
2021/03/06 新手入门
php调用dll的实例操作动画与代码分享
2012/08/14 PHP
Yii查询生成器(Query Builder)用法实例教程
2014/09/04 PHP
php处理带有中文URL的方法
2016/07/11 PHP
Laravel 数据库加密及数据库表前缀配置方法
2019/10/10 PHP
js快速排序的实现代码
2013/12/08 Javascript
jQuery trigger()方法用法介绍
2015/01/13 Javascript
node+experss实现爬取电影天堂爬虫
2016/11/20 Javascript
jQuery Validate表单验证插件的基本使用方法及功能拓展
2017/01/04 Javascript
jQuery实现判断控件是否显示的方法
2017/01/11 Javascript
JavaScript通过mouseover()实现图片变大效果的示例
2017/12/20 Javascript
JS实现可针对算术表达式求值的计算器功能示例
2018/09/04 Javascript
nodejs微信开发之自动回复的实现
2019/03/17 NodeJs
微信小程序人脸识别功能代码实例
2019/05/07 Javascript
jQuery Raty星级评分插件使用方法实例分析
2019/11/25 jQuery
Jquery使用each函数实现遍历及数组处理
2020/07/14 jQuery
Python实现从url中提取域名的几种方法
2014/09/26 Python
Python利用递归实现文件的复制方法
2018/10/27 Python
10分钟教你用Python实现微信自动回复功能
2018/11/28 Python
Python实现i人事自动打卡的示例代码
2020/01/09 Python
Django之富文本(获取内容,设置内容方式)
2020/05/21 Python
Django微信小程序后台开发教程的实现
2020/06/03 Python
Keras: model实现固定部分layer,训练部分layer操作
2020/06/28 Python
Python如何实现机器人聊天
2020/09/10 Python
Python高阶函数与装饰器函数的深入讲解
2020/11/10 Python
python爬虫如何解决图片验证码
2021/02/14 Python
上海中网科技笔试题
2012/02/19 面试题
网站美工岗位职责
2014/04/02 职场文书
服务理念标语
2014/06/18 职场文书
党员三严三实对照检查材料
2014/10/13 职场文书
关于颐和园的导游词
2015/01/30 职场文书
工程质量保证书
2015/05/09 职场文书
运动会闭幕式通讯稿
2015/07/18 职场文书
django上传文件的三种方式
2021/04/29 Python
深入浅析Django MTV模式
2021/09/04 Python
最新最全的手机号验证正则表达式
2022/02/24 Javascript