浅析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 Ctemplate引擎开发相关内容
Mar 03 PHP
解析php中的fopen()函数用打开文件模式说明
Jun 20 PHP
解析yii数据库的增删查改
Jun 20 PHP
PHP过滤★等特殊符号的正则
Jan 27 PHP
查找php配置文件php.ini所在路径的二种方法
May 26 PHP
浅谈ThinkPHP的URL重写
Nov 25 PHP
php使用pdo连接mssql server数据库实例
Dec 25 PHP
PHP中浮点数计算比较及取整不准确的解决方法
Jan 09 PHP
php实现登录tplink WR882N获取IP和重启的方法
Jul 20 PHP
php框架CodeIgniter主从数据库配置方法分析
May 25 PHP
PHP使用phpunit进行单元测试示例
Sep 23 PHP
关于PHP求解三数之和问题详析
Nov 09 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-accelerator网站加速PHP缓冲的方法
2008/07/30 PHP
解析使用substr截取UTF-8中文字符串出现乱码的问题
2013/06/20 PHP
php生成RSS订阅的方法
2015/02/13 PHP
在PHP站点的页面上添加Facebook评论插件的实例教程
2016/01/08 PHP
PHP常用的三种设计模式汇总
2016/08/28 PHP
php中Ioc(控制反转)和Di(依赖注入)
2017/05/07 PHP
解析arp病毒背后利用的Javascript技术附解密方法
2007/08/06 Javascript
jQuery结合Json提交数据到Webservice,并接收从Webservice返回的Json数据
2011/02/18 Javascript
jquery实现每个数字上都带进度条的幻灯片
2013/02/20 Javascript
JavaScript中的操作符==与===介绍
2014/12/31 Javascript
jquery中change()用法实例分析
2015/02/06 Javascript
jQuery实现右下角可缩放大小的层完整实例
2016/06/20 Javascript
Bootstrap select多选下拉框实现代码
2016/12/23 Javascript
原生js实现水平方向无缝滚动
2017/01/10 Javascript
Vue内容分发slot(全面解析)
2017/08/19 Javascript
vue-cli脚手架引入图片的几种方法总结
2018/03/13 Javascript
微信小程序实现展示评分结果功能
2019/02/15 Javascript
vue2.0基于vue-cli+element-ui制作树形treeTable
2019/04/30 Javascript
学习RxJS之JavaScript框架Cycle.js
2019/06/17 Javascript
python动态监控日志内容的示例
2014/02/16 Python
OpenCV+python手势识别框架和实例讲解
2018/08/03 Python
在Ubuntu 20.04中安装Pycharm 2020.1的图文教程
2020/04/30 Python
python怎么判断素数
2020/07/01 Python
css3 边框、背景、文本效果的实现代码
2018/03/21 HTML / CSS
详解HTML5将footer置于页面最底部的方法(CSS+JS)
2018/10/11 HTML / CSS
澳大利亚床上用品、浴巾和家居用品购物网站:Bambury
2020/04/16 全球购物
医院护士求职自荐信格式
2013/09/21 职场文书
国际商务专业学生个人的自我评价
2013/09/28 职场文书
办公室前台岗位职责范本
2013/12/10 职场文书
仓库管理制度
2014/01/21 职场文书
交通事故赔偿协议书范本
2014/04/15 职场文书
活动总结报告范文
2014/05/04 职场文书
电子信息工程专业求职信
2014/06/28 职场文书
民族学专业求职信
2014/07/28 职场文书
初三英语教学计划
2015/01/23 职场文书
护士节慰问信
2015/02/15 职场文书