浅析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制作静态网站的模板框架
Oct 09 PHP
php include,include_once,require,require_once
Sep 05 PHP
php PDO中文乱码解决办法
Jul 20 PHP
一个典型的PHP分页实例代码分享
Jul 28 PHP
奉献出一个封装的curl函数 便于调用(抓数据专用)
Jul 22 PHP
Chrome Web App开发小结
Sep 04 PHP
php中rename函数用法分析
Nov 15 PHP
PHP+Mysql+jQuery文件下载次数统计实例讲解
Oct 10 PHP
关于WordPress的SEO优化相关的一些PHP页面脚本技巧
Dec 10 PHP
CodeIgniter分页类pagination使用方法示例
Mar 28 PHP
PHP设计模式之工厂模式定义与用法详解
Apr 03 PHP
php实现对短信验证码发送次数的限制实例讲解
Mar 04 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+MySql+Ajax+jQuery实现省市区三级联动功能示例
2017/09/15 PHP
PHP简单实现记录网站访问量功能示例
2018/06/06 PHP
JavaScript高级程序设计(第3版)学习笔记2 js基础语法
2012/10/11 Javascript
jQuery满意度星级评价插件特效代码分享
2015/08/19 Javascript
Jquery组件easyUi实现手风琴(折叠面板)示例
2016/08/23 Javascript
Javascript实现倒计时(防页面刷新)实例
2016/12/13 Javascript
js中获取键盘按下键值event.keyCode、event.charCode和event.which的兼容性详解
2017/03/15 Javascript
Angular获取手机验证码实现移动端登录注册功能
2017/05/17 Javascript
Javascript实现的StopWatch功能示例
2017/06/13 Javascript
全站最详细的Vuex教程
2018/04/13 Javascript
node实现的爬虫功能示例
2018/05/04 Javascript
微信 jssdk 签名错误invalid signature的解决方法
2019/01/14 Javascript
vue实现的微信机器人聊天功能案例【附源码下载】
2019/02/18 Javascript
JS判断数组里是否有重复元素的方法小结
2019/05/21 Javascript
vue element upload组件 file-list的动态绑定实现
2019/10/11 Javascript
详解javascript中var与ES6规范中let、const区别与用法
2020/01/11 Javascript
Jquery $.map使用方法实例详解
2020/09/01 jQuery
VUE : vue-cli中去掉路由中的井号#操作
2020/09/04 Javascript
JS highcharts实现动态曲线代码示例
2020/10/16 Javascript
python修改注册表终止360进程实例
2014/10/13 Python
python用来获得图片exif信息的库实例分析
2015/03/16 Python
Python smallseg分词用法实例分析
2015/05/28 Python
使用Python绘制图表大全总结
2017/02/11 Python
python多进程实现文件下载传输功能
2018/07/28 Python
用Q-learning算法实现自动走迷宫机器人的方法示例
2019/06/03 Python
pip安装python库的方法总结
2019/08/02 Python
高中体育教学反思
2014/01/29 职场文书
大学生的创业计划书就该这么写
2014/01/30 职场文书
建筑工地标语
2014/06/18 职场文书
求职意向书
2014/07/29 职场文书
大学生村官个人对照检查材料(群众路线)
2014/09/26 职场文书
2015年清明节演讲稿范文
2015/03/17 职场文书
医德医风学习心得体会
2016/01/25 职场文书
什么是创业计划书?什么是商业计划书?这里一一解答
2019/07/12 职场文书
vue项目两种方式实现竖向表格的思路分析
2021/04/28 Vue.js
Windows和Linux上部署Golang并运行程序
2022/04/22 Servers