浅析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 相关文章推荐
PHP中显示格式化的用户输入
Oct 09 PHP
PHP 高手之路(二)
Oct 09 PHP
php 结果集的分页实现代码
Mar 10 PHP
PHP高级OOP技术演示
Aug 27 PHP
PHP网站安装程序制作的原理、步骤、注意事项和示例代码
Aug 01 PHP
超级实用的7个PHP代码片段分享
Jan 05 PHP
深入php 正则表达式的学习探讨
Jun 06 PHP
PHP删除HTMl标签的实现代码
Jun 30 PHP
ThinkPHP字符串函数及常用函数汇总
Jul 18 PHP
Laravel 5框架学习之日期,Mutator 和 Scope
Apr 08 PHP
PHP preg_match实现正则表达式匹配功能【输出是否匹配及匹配值】
Jul 19 PHP
Laravel 错误提示本地化的实现
Oct 22 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
如何给phpcms v9增加类似于phpcms 2008中的关键词表
2013/07/01 PHP
使用prototype.js 的时候应该特别注意的几个问题.
2007/04/12 Javascript
JQuery 无废话系列教程(一) jquery入门 [推荐]
2009/06/23 Javascript
window.onload 加载完毕的问题及解决方案(下)
2009/07/09 Javascript
监控 url fragment变化的js代码
2010/04/19 Javascript
jquery select动态加载选择(兼容各种浏览器)
2013/02/01 Javascript
一款基jquery超炫的动画导航菜单可响应单击事件
2014/11/02 Javascript
jQuery的context属性用法实例
2014/12/27 Javascript
js实现div层缓慢收缩与展开的方法
2015/05/11 Javascript
jQuery mobile转换url地址及获取url中目录部分的方法
2015/12/04 Javascript
JS实现pasteHTML兼容ie,firefox,chrome的方法
2016/06/22 Javascript
基于MVC5和Bootstrap的jQuery TreeView树形控件(二)之数据支持json字符串、list集合
2016/08/11 Javascript
浅谈js的异步执行
2016/10/18 Javascript
javascript+html5+css3自定义提示窗口
2017/06/21 Javascript
深入理解vue.js中$watch的oldvalue与newValue
2017/08/07 Javascript
JS中Attr的用法详解
2017/10/09 Javascript
Angular4 反向代理Details实践
2018/05/30 Javascript
Vue2.0 v-for filter列表过滤功能的实现
2018/09/07 Javascript
使用JS判断页面是首次被加载还是刷新
2019/05/26 Javascript
微信小程序实现写入读取缓存详解
2019/08/30 Javascript
微信小程序学习总结(一)项目创建与目录结构分析
2020/06/04 Javascript
python实现绘制树枝简单示例
2014/07/24 Python
python开启多个子进程并行运行的方法
2015/04/18 Python
在Python中处理字符串之isdecimal()方法的使用
2015/05/20 Python
Python使用Scrapy爬虫框架全站爬取图片并保存本地的实现代码
2018/03/04 Python
Python实现的个人所得税计算器示例
2018/06/01 Python
在PyCharm中控制台输出日志分层级分颜色显示的方法
2019/07/11 Python
pandas实现将日期转换成timestamp
2019/12/07 Python
python如何解析复杂sql,实现数据库和表的提取的实例剖析
2020/05/15 Python
Python filter()及reduce()函数使用方法解析
2020/09/05 Python
荷兰之家英文站:Holland at Home
2016/10/26 全球购物
摩顿布朗英国官方网上商店:奢华沐浴、身体和头发护理
2016/10/29 全球购物
大学生个人自荐信样本
2014/03/02 职场文书
捐款活动总结
2014/08/27 职场文书
岁月神偷观后感
2015/06/11 职场文书
欠条格式范本
2015/07/03 职场文书