浅析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 相关文章推荐
phpmyadmin MySQL 加密配置方法
Jul 05 PHP
PHP 关于访问控制的和运算符优先级介绍
Jul 08 PHP
PHP 动态生成静态HTML页面示例代码
Jan 15 PHP
PHP CURL获取返回值的方法
May 04 PHP
PHP针对JSON操作实例分析
Jan 12 PHP
Yii2.0表关联查询实例分析
Jul 18 PHP
mac系统下为 php 添加 pcntl 扩展
Aug 28 PHP
php array_udiff_assoc 计算两个数组的差集实例
Nov 12 PHP
PHP 7安装调试工具Xdebug扩展的方法教程
Jun 17 PHP
php实现的pdo公共类定义与用法示例
Jul 19 PHP
php实现算术验证码功能
Dec 05 PHP
PHP通过调用新浪API生成t.cn格式短网址链接的方法详解
Feb 20 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学习资源和链接.
2006/12/05 PHP
自己在做项目过程中学到的PHP知识收集
2012/08/20 PHP
JavaScript中的集合及效率
2010/01/08 Javascript
extjs中grid中嵌入动态combobox的应用
2011/01/01 Javascript
js自动生成的元素与页面原有元素发生堆叠的解决方法
2013/10/24 Javascript
css+js实现部分区域高亮可编辑遮罩层
2014/03/04 Javascript
jquery中表单 多选框的一种巧妙写法
2015/09/06 Javascript
CSS或者JS实现鼠标悬停显示另一元素
2016/01/22 Javascript
AngularJS中使用HTML5手机摄像头拍照
2016/02/22 Javascript
JavaScript数组操作函数汇总
2016/08/05 Javascript
js中遍历Map对象的简单实例
2016/08/08 Javascript
AngularJS  ng-table插件设置排序
2016/09/21 Javascript
JavaScript实现图片瀑布流和底部刷新
2017/01/02 Javascript
微信小程序 数据交互与渲染实例详解
2017/01/21 Javascript
TableSort.js表格排序插件使用方法详解
2017/02/10 Javascript
Web纯前端“旭日图”实现元素周期表
2017/03/10 Javascript
bootstrap treeview 树形菜单带复选框及级联选择功能
2018/06/08 Javascript
JavaScript动态添加数据到表单并提交的几种方式
2019/06/26 Javascript
vue引入静态js文件的方法
2020/06/20 Javascript
vue实现数字滚动效果
2020/06/29 Javascript
[03:38]2014DOTA2西雅图国际邀请赛 VG战队巡礼
2014/07/07 DOTA
[03:57]2016完美“圣”典风云人物:rOtk专访
2016/12/09 DOTA
使用Kivy将python程序打包为apk文件
2017/07/29 Python
Python 3.x读写csv文件中数字的方法示例
2017/08/29 Python
利用Python进行异常值分析实例代码
2017/12/07 Python
Python实现的质因式分解算法示例
2018/05/03 Python
python实现AES加密和解密
2019/03/27 Python
Django中多种重定向方法使用详解
2019/07/17 Python
浅谈keras中自定义二分类任务评价指标metrics的方法以及代码
2020/06/11 Python
python爬虫爬取淘宝商品比价(附淘宝反爬虫机制解决小办法)
2020/12/03 Python
Move Free官方海外旗舰店:美国骨关节健康专业品牌
2017/12/06 全球购物
Vichy薇姿加拿大官网:法国药妆,全球专业敏感肌护肤领先品牌
2018/07/11 全球购物
网站编辑求职信
2013/10/17 职场文书
丧事酒宴答谢词
2015/09/30 职场文书
uniapp开发小程序的经验总结
2021/04/08 Javascript
python如何正确使用yield
2021/05/21 Python