浅析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下HTTP Response中的Chunked编码实现方法
Nov 19 PHP
PHP全概率运算函数(优化版) Webgame开发必备
Jul 04 PHP
php array_walk() 数组函数
Jul 12 PHP
PHP中VC6、VC9、TS、NTS版本的区别与用法详解
Oct 26 PHP
PHP 字符串长度判断效率更高的方法
Mar 02 PHP
php在linux下检测mysql同步状态的方法
Jan 15 PHP
PHP速成大法
Jan 30 PHP
codeigniter中实现一次性加载多个view的方法
Mar 20 PHP
全面了解PHP中的全局变量
Jun 17 PHP
php中strtotime函数性能分析
Nov 20 PHP
PDO::commit讲解
Jan 27 PHP
PHP7 echo和print语句实例用法
Feb 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
不错的PHP学习之php4与php5之间会穿梭一点点感悟
2007/05/03 PHP
一个比较简单的PHP 分页分组类
2009/12/10 PHP
yii框架源码分析之创建controller代码
2011/06/28 PHP
深入php self与$this的详解
2013/06/08 PHP
ThinkPHP处理Ajax返回的方法
2014/11/22 PHP
浅谈ThinkPHP的URL重写
2014/11/25 PHP
jquery选择器之层级过滤选择器详解
2014/01/27 Javascript
JavaScript实现选择框按比例拖拉缩放的方法
2015/08/04 Javascript
实例讲解Jquery中隐藏hide、显示show、切换toggle的用法
2016/05/13 Javascript
jQuery获取复选框被选中数量及判断选择值的方法详解
2016/05/25 Javascript
ES6所改良的javascript“缺陷”问题
2016/08/23 Javascript
js 获取图像缩放后的实际宽高,位置等信息
2017/03/07 Javascript
详解Vue+Element的动态表单,动态表格(后端发送配置,前端动态生成)
2019/04/20 Javascript
详解key在Vue列表渲染时究竟起到了什么作用
2019/04/20 Javascript
vuex的数据渲染与修改浅析
2020/11/26 Vue.js
Python基类函数的重载与调用实例分析
2015/01/12 Python
python计算文本文件行数的方法
2015/07/06 Python
Python读取和处理文件后缀为.sqlite的数据文件(实例讲解)
2017/06/27 Python
Python实现删除时保留特定文件夹和文件的示例
2018/04/27 Python
Python2.7环境Flask框架安装简明教程【已测试】
2018/07/13 Python
Python 实现异步调用函数的示例讲解
2018/10/14 Python
Python调用C语言的实现
2019/07/26 Python
python wav模块获取采样率 采样点声道量化位数(实例代码)
2020/01/22 Python
django2.2 和 PyMySQL版本兼容问题
2020/02/17 Python
使用Pycharm在运行过程中,查看每个变量的操作(show variables)
2020/06/08 Python
The Hut美国/加拿大:英国领先的豪华在线百货商店
2019/03/26 全球购物
迪奥美国官网:Dior美国
2019/12/07 全球购物
物理教师自荐信范文
2013/12/28 职场文书
营业员演讲稿
2013/12/30 职场文书
敬老文明号事迹材料
2014/01/16 职场文书
单身联谊活动方案
2014/01/29 职场文书
组织生活会表态发言材料
2014/10/17 职场文书
中学生检讨书1000字
2014/10/28 职场文书
商务英语求职信范文
2015/03/19 职场文书
导游词之清晏园
2019/11/22 职场文书
pytorch通过训练结果的复现设置随机种子
2021/06/01 Python