浅析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与SQL注入攻击[一]
Apr 17 PHP
Windows PHP5和Apache的安装与配置
Jun 08 PHP
PHP stristr() 函数(不区分大小写的字符串查找)
Jun 03 PHP
解决PHP在DOS命令行下却无法链接MySQL的技术笔记
Dec 29 PHP
那些年一起学习的PHP(二)
Mar 21 PHP
php几个预定义变量$_SERVER用法小结
Nov 07 PHP
PHP图片处理之使用imagecopyresampled函数裁剪图片例子
Nov 19 PHP
PHP中浮点数计算比较及取整不准确的解决方法
Jan 09 PHP
php实现比较两个字符串日期大小的方法
May 12 PHP
PHP 前加at符合@的作用解析
Jul 31 PHP
微信开发之网页授权获取用户信息(二)
Jan 08 PHP
PHP 计算至少是其他数字两倍的最大数的实现代码
May 26 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
分页显示Oracle数据库记录的类之一
2006/10/09 PHP
文章推荐系统(二)
2006/10/09 PHP
基于PHP-FPM进程池探秘
2017/10/17 PHP
动态控制Table的js代码
2007/03/07 Javascript
学习YUI.Ext 第二天
2007/03/10 Javascript
JavaScript库 开发规则
2009/01/31 Javascript
jquery 读取页面load get post ajax 四种方式代码写法
2011/04/02 Javascript
JavaScript中Null与Undefined的区别解析
2015/06/30 Javascript
分析js闭包引起的事件注册问题
2016/03/29 Javascript
JavaScript 拖拽实例代码
2016/09/21 Javascript
angular ng-click防止重复提交实例
2017/06/16 Javascript
vue页面跳转后返回原页面初始位置方法
2018/02/11 Javascript
微信小程序实现倒计时调用相机自动拍照功能
2018/06/10 Javascript
Vue 中的受控与非受控组件的实现
2018/12/17 Javascript
详解微信小程序-获取用户session_key,openid,unionid - 后端为nodejs
2019/04/29 NodeJs
vue动态渲染svg、添加点击事件的实现
2020/03/13 Javascript
javascript设计模式 ? 外观模式原理与用法实例分析
2020/04/15 Javascript
[03:36]2015国际邀请赛第二日现场精彩集锦
2015/08/06 DOTA
Python中字符串的格式化方法小结
2016/05/03 Python
Python利用matplotlib.pyplot绘图时如何设置坐标轴刻度
2018/04/09 Python
Pycharm 操作Django Model的简单运用方法
2018/05/23 Python
解决python 未发现数据源名称并且未指定默认驱动程序的问题
2018/12/07 Python
python Shapely使用指南详解
2020/02/18 Python
python读取hdfs并返回dataframe教程
2020/06/05 Python
Python with语句用法原理详解
2020/07/03 Python
幼儿园清明节活动总结
2014/07/04 职场文书
2014年大学生预备党员思想汇报1000字
2014/09/13 职场文书
教师自我剖析材料
2014/09/29 职场文书
技术股东合作协议书
2014/12/02 职场文书
2014年办公室人员工作总结
2014/12/09 职场文书
八达岭长城导游词
2015/01/30 职场文书
房屋维修申请报告
2015/05/18 职场文书
2015年为民办实事工作总结
2015/05/26 职场文书
Python 居然可以在 Excel 中画画你知道吗
2022/02/15 Python
golang实现浏览器导出excel文件功能
2022/03/25 Golang
macos系统如何实现微信双开? mac登录两个微信以上微信的技巧
2022/07/23 数码科技