浅析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 cout&amp;lt;&amp;lt;的一点看法
Jan 24 PHP
PHP GD 图像处理组件的常用函数总结
Apr 28 PHP
php中的filesystem文件系统函数介绍及使用示例
Feb 13 PHP
PHP实现文件下载详解
Nov 27 PHP
php实现session自定义会话处理器的方法
Jan 27 PHP
PHP批量查询WordPress留言者E-mail地址实现方法
Feb 15 PHP
分享php分页的功能模块
Jun 16 PHP
php实现递归的三种基本方式
Jul 04 PHP
给WordPress的编辑后台添加提示框的代码实例分享
Dec 25 PHP
php微信公众号开发(4)php实现自定义关键字回复
Dec 15 PHP
PHP第三方登录―QQ登录实现方法
Feb 06 PHP
PHP实现微信支付(jsapi支付)流程步骤详解
Mar 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
绿山咖啡和蓝山咖啡
2021/03/04 新手入门
PHP APC配置文件2套和参数详解
2014/06/11 PHP
jquery获取多个checkbox的值异步提交给php的方法
2015/06/24 PHP
浅析PHP7的多进程及实例源码
2019/04/14 PHP
TP5框架实现一次选择多张图片并预览的方法示例
2020/04/04 PHP
javascript SocialHistory 检查访问者是否访问过某站点
2008/08/02 Javascript
JavaScript正则表达式小结(test|match|search|replace|split|exec)
2016/12/08 Javascript
js中new一个对象的过程
2017/02/20 Javascript
BootStrap表单宽度设置方法
2017/03/10 Javascript
JS解决移动web开发手机输入框弹出的问题
2017/03/31 Javascript
NodeJS实现不可逆加密与密码密文保存的方法
2018/03/16 NodeJs
vue-cli3.0如何使用CDN区分开发、生产、预发布环境
2018/11/22 Javascript
JS面向对象编程——ES6 中class的继承用法详解
2020/03/03 Javascript
python计算auc指标实例
2017/07/13 Python
python实战教程之自动扫雷
2018/07/13 Python
Python3实现的判断环形链表算法示例
2019/03/07 Python
Pycharm小白级简单使用教程
2020/01/08 Python
Python多线程的退出控制实现
2020/08/10 Python
Html5实现移动端、PC端 刮刮卡效果
2016/06/30 HTML / CSS
Nuts.com:优质散装,批发坚果、干果和巧克力等
2017/03/21 全球购物
薇诺娜官方网上商城:专注敏感肌肤
2017/05/25 全球购物
英国综合网上购物商城:The Hut
2018/07/03 全球购物
有模特经验的简历自我评价
2013/09/19 职场文书
小学生成长感言
2014/01/30 职场文书
经管应届生求职信范文
2014/05/18 职场文书
岗位明星事迹材料
2014/05/18 职场文书
会议室标语
2014/06/21 职场文书
个人作风建设心得体会
2014/10/22 职场文书
民事辩护词范文
2015/05/21 职场文书
萤火虫之墓观后感
2015/06/05 职场文书
火锅店的开业营销方案范本!
2019/07/05 职场文书
jquery插件实现搜索历史
2021/04/24 jQuery
详解RedisTemplate下Redis分布式锁引发的系列问题
2021/04/27 Redis
Python基础之赋值,浅拷贝,深拷贝的区别
2021/04/30 Python
Nginx下SSL证书安装部署步骤介绍
2021/12/06 Servers
Docker下安装Oracle19c
2022/04/13 Servers