浅析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学习教程之第1天
Jun 15 PHP
PHP高级OOP技术演示
Aug 27 PHP
simplehtmldom Doc api帮助文档
Mar 26 PHP
php 计划任务 检测用户连接状态
Mar 29 PHP
PHP函数学习之PHP函数点评
Jul 05 PHP
php中explode的负数limit用法分析
Feb 27 PHP
CI(CodeIgniter)模型用法实例分析
Jan 20 PHP
详解PHP的Yii框架的运行机制及其路由功能
Mar 17 PHP
PHP多进程之pcntl_fork的实例详解
Oct 15 PHP
PHP7扩展开发之hello word实现方法详解
Jan 15 PHP
PHP实现的服务器一致性hash分布算法示例
Aug 09 PHP
Laravel5.5 手动分页和自定义分页样式的简单实现
Oct 15 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
xml+php动态载入与分页
2006/10/09 PHP
PHP语法自动检查的Vim插件
2014/08/11 PHP
PHP的curl函数的用法总结
2019/02/14 PHP
接收键盘指令的脚本
2006/06/26 Javascript
跟着JQuery API学Jquery 之三 筛选
2010/04/09 Javascript
javascript数组去重3种方法的性能测试与比较
2013/03/26 Javascript
解决IE6的PNG透明JS插件使用介绍
2013/04/17 Javascript
JavaScript Function函数类型介绍
2015/04/08 Javascript
javascript鼠标滑动评分控件完整实例
2015/05/13 Javascript
jQuery插件bgStretcher.js实现全屏背景特效
2015/06/05 Javascript
前端面试题及答案整理(二)
2016/08/26 Javascript
Angular2 (RC4) 路由与导航详解
2016/09/21 Javascript
Angular 4.X开发实践中的踩坑小结
2017/07/04 Javascript
JavaScript数据结构之双向链表定义与使用方法示例
2017/10/27 Javascript
详谈js中标准for循环与foreach(for in)的区别
2017/11/02 Javascript
使用koa-log4管理nodeJs日志笔记的使用方法
2018/11/30 NodeJs
浅谈JavaScript 代码简洁之道
2019/01/09 Javascript
vue监听浏览器原生返回按钮,进行路由转跳操作
2020/09/09 Javascript
python中列表元素连接方法join用法实例
2015/04/07 Python
在Python的Django框架中包装视图函数
2015/07/20 Python
python异常和文件处理机制详解
2016/07/19 Python
python实时获取外部程序输出结果的方法
2019/01/12 Python
python重试装饰器的简单实现方法
2019/01/31 Python
Python Des加密解密如何实现软件注册码机器码
2020/01/08 Python
pytorch 图像中的数据预处理和批标准化实例
2020/01/15 Python
python如何求数组连续最大和的示例代码
2020/02/04 Python
python实现图片转字符画的完整代码
2021/02/21 Python
css3类选择器之结合元素选择器和多类选择器用法
2017/03/09 HTML / CSS
利用html5的websocket实现websocket聊天室
2013/12/12 HTML / CSS
微软马来西亚官方网站:Microsoft马来西亚
2019/11/22 全球购物
优秀党员转正的自我评价
2013/10/06 职场文书
桥梁与隧道工程专业本科生求职信
2013/10/08 职场文书
计划生育证明书写要求
2014/09/17 职场文书
个人整改措施书面材料
2014/10/24 职场文书
投标邀请书范本
2015/02/02 职场文书
护士岗前培训心得体会
2016/01/08 职场文书