浅析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图片上传存储源码并且可以预览
Aug 26 PHP
php计算十二星座的函数代码
Aug 21 PHP
PHP写的获取各搜索蜘蛛爬行记录代码
Aug 21 PHP
如何用php获取程序执行的时间
Jun 09 PHP
浅析PHP程序防止ddos,dns,集群服务器攻击的解决办法
Jun 18 PHP
CodeIgniter框架提示Disallowed Key Characters的解决办法
Apr 21 PHP
php采集自中央气象台范围覆盖全国的天气预报代码实例
Jan 04 PHP
php使用COPY函数更新配置文件的方法
Jun 18 PHP
php实现通过cookie换肤的方法
Jul 13 PHP
PHP操作FTP类 (上传、下载、移动、创建等)
Mar 31 PHP
浅谈PHP中pack、unpack的详细用法
Mar 12 PHP
针对thinkPHP5框架存储过程bug重写的存储过程扩展类完整实例
Jun 16 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 下载文件时如何自动添加bom头及解释BOM头和去掉bom头的方法
2016/01/04 PHP
yii2 RBAC使用DbManager实现后台权限判断的方法
2016/07/23 PHP
Javascript MD4
2006/12/20 Javascript
JQuery小知识
2010/10/15 Javascript
浅析Cookie中的Path与domain
2013/12/18 Javascript
提交按钮的name='submit'引起的js失效问题及原因
2015/02/25 Javascript
jQuery链式调用与show知识浅析
2016/05/11 Javascript
使用jQuery.form.js/springmvc框架实现文件上传功能
2016/05/12 Javascript
jQuery改变form表单的action,并进行提交的实现代码
2016/05/25 Javascript
Jquery on方法绑定事件后执行多次的解决方法
2016/06/02 Javascript
js获取一组日期中最近连续的天数
2017/05/25 Javascript
Ionic + Angular.js实现验证码倒计时功能的方法
2017/06/12 Javascript
JS实现上传图片的三种方法并实现预览图片功能
2017/07/14 Javascript
bootstrap fileinput实现文件上传功能
2017/08/23 Javascript
Vue 组件(component)教程之实现精美的日历方法示例
2018/01/08 Javascript
JS/HTML5游戏常用算法之路径搜索算法 随机迷宫算法详解【普里姆算法】
2018/12/13 Javascript
如何使用electron-builder及electron-updater给项目配置自动更新
2018/12/24 Javascript
javascript 易错知识点实例小结
2020/04/25 Javascript
用Python的线程来解决生产者消费问题的示例
2015/04/02 Python
使用Python的Twisted框架构建非阻塞下载程序的实例教程
2016/05/25 Python
Python openpyxl 遍历所有sheet 查找特定字符串的方法
2018/12/10 Python
详解opencv Python特征检测及K-最近邻匹配
2019/01/21 Python
Python时间序列处理之ARIMA模型的使用讲解
2019/04/02 Python
Python3实现计算两个数组的交集算法示例
2019/04/03 Python
python与C、C++混编的四种方式(小结)
2019/07/15 Python
200行python代码实现2048游戏
2019/07/17 Python
python 画出使用分类器得到的决策边界
2019/08/21 Python
Python中断多重循环的思路总结
2019/10/04 Python
Python如何将字符串转换为日期
2020/07/31 Python
python 删除系统中的文件(按时间,大小,扩展名)
2020/11/19 Python
关于Python 解决Python3.9 pandas.read_excel(‘xxx.xlsx‘)报错的问题
2020/11/28 Python
四风自我剖析材料
2014/09/30 职场文书
2015年实习生工作总结报告
2015/04/28 职场文书
员工试用期工作总结
2019/06/20 职场文书
Java生成日期时间存入Mysql数据库的实现方法
2022/03/03 Java/Android
如何使用注解方式实现 Redis 分布式锁
2022/07/23 Redis