浅析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 相关文章推荐
第十二节 类的自动加载 [12]
Oct 09 PHP
PHP源代码数组统计count分析
Aug 02 PHP
PHP排序算法类实例
Jun 17 PHP
浅谈php中include文件变量作用域
Jun 18 PHP
详解WordPress开发中过滤属性以及Sql语句的函数使用
Dec 25 PHP
php mongodb操作类 带几个简单的例子
Aug 25 PHP
Nginx环境下PHP flush失效的解决方法
Oct 19 PHP
[原创]php集成安装包wampserver修改密码后phpmyadmin无法登陆的解决方法
Nov 23 PHP
PHP实现删除多重数组对象属性并重新赋值的方法
Jun 07 PHP
php命令行写shell实例详解
Jul 19 PHP
Laravel5.5以下版本中如何自定义日志行为详解
Aug 01 PHP
宝塔面板出现“open_basedir restriction in effect. ”的解决方法
Mar 14 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程序的国际化实现方法(利用gettext)
2011/08/14 PHP
用PHP+MySQL搭建聊天室功能实例代码
2012/08/20 PHP
ThinkPHP模板输出display用法分析
2014/11/26 PHP
PHP获取文件夹内文件数的方法
2015/03/12 PHP
PHP判断字符串长度的两种方法很实用
2015/09/22 PHP
PHP copy函数使用案例代码解析
2020/09/01 PHP
User Scripts: Video Download by User Scripts
2007/05/14 Javascript
js中switch case循环实例代码
2013/12/30 Javascript
jQuery动态效果显示人物结构关系图的方法
2015/05/07 Javascript
如何屏蔽防止别的网站嵌入框架代码
2015/08/24 Javascript
Bootstrap弹出带合法性检查的登录框实例代码【推荐】
2016/06/23 Javascript
微信小程序 教程之模块化
2016/10/17 Javascript
jQuery实现淡入淡出的模态框
2017/02/09 Javascript
JavaScript之排序函数_动力节点Java学院整理
2017/06/30 Javascript
深入理解vue-router之keep-alive
2017/08/31 Javascript
利用node实现一个批量重命名文件的函数
2017/12/21 Javascript
jQuery扩展方法实现Form表单与Json互相转换的实例代码
2018/09/05 jQuery
React和Vue中监听变量变化的方法
2018/11/14 Javascript
[53:15]2018DOTA2亚洲邀请赛3月29日 小组赛A组 KG VS OG
2018/03/30 DOTA
[03:08]迎霜节狂欢!2018年迎霜节珍藏Ⅰ一览
2018/12/25 DOTA
Python开发微信公众平台的方法详解【基于weixin-knife】
2017/07/08 Python
apache部署python程序出现503错误的解决方法
2017/07/24 Python
python 多个参数不为空校验方法
2019/02/14 Python
python如何统计代码运行的时长
2019/07/24 Python
Golang GBK转UTF-8的例子
2019/08/26 Python
pytorch载入预训练模型后,实现训练指定层
2020/01/06 Python
python 实现将Numpy数组保存为图像
2020/01/09 Python
Python使用docx模块实现刷题功能代码
2020/02/13 Python
Python unittest单元测试openpyxl实现过程解析
2020/05/27 Python
猫途鹰:全球领先的旅游点评社区
2017/04/07 全球购物
颇特女士香港官网:NET-A-PORTER香港
2021/03/08 全球购物
《登鹳雀楼》教学反思
2014/04/09 职场文书
推荐信格式要求
2014/05/09 职场文书
体育委员竞选稿
2015/11/21 职场文书
图片批量处理 - 尺寸、格式、水印等
2022/03/07 杂记
Python实现提取PDF简历信息并存入Excel
2022/04/02 Python