浅析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-5.2 的 php.ini 中文版[金步国翻译]
Apr 17 PHP
Session服务器配置指南与使用经验的深入解析
Jun 17 PHP
ThinkPHP令牌验证实例
Jun 18 PHP
PHP入门教程之数学运算技巧总结
Sep 11 PHP
php版微信公众平台开发之验证步骤实例详解
Sep 23 PHP
PHP生成word文档的三种实现方式
Nov 14 PHP
PHP依赖注入(DI)和控制反转(IoC)详解
Jun 12 PHP
PHP调用API接口实现天气查询功能的示例
Sep 21 PHP
基于Laravel实现的用户动态模块开发
Sep 21 PHP
PHP实现的AES双向加密解密功能示例【128位】
Sep 03 PHP
PHP的JSON封装、转变及输出操作示例
Sep 27 PHP
PHP实现笛卡尔积算法的实例讲解
Dec 22 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
基于asp+ajax和数据库驱动的二级联动菜单
2010/05/06 PHP
php类中private属性继承问题分析
2012/11/01 PHP
ThinkPHP验证码和分页实例教程
2014/08/22 PHP
php 读写json文件及修改json的方法
2018/03/07 PHP
实现连缀调用的map方法(prototype)
2009/08/05 Javascript
在标题栏显示新消息提示,很多公司项目中用到这个方法
2011/11/04 Javascript
UI Events 用户界面事件
2012/06/27 Javascript
JavaScript高级程序设计 阅读笔记(十八) js跨平台的事件
2012/08/14 Javascript
实用的JS正则表达式(手机号码/IP正则/邮编正则/电话等)
2013/01/11 Javascript
jquery基础教程之deferred对象使用方法
2014/01/22 Javascript
javascript判断是手机还是电脑访问网页的简单实例分享
2014/06/03 Javascript
微信小程序 video组件详解
2016/10/25 Javascript
web 屏蔽BackSpace键实例代码
2016/12/24 Javascript
关于vue.js发布后路径引用的问题解决
2017/08/15 Javascript
简单谈谈js的数据类型
2017/09/25 Javascript
JS使用for in有序获取对象数据
2020/05/19 Javascript
详解JavaScript中的Object.is()与&quot;===&quot;运算符总结
2020/06/17 Javascript
从零学python系列之数据处理编程实例(二)
2014/05/22 Python
pygame学习笔记(3):运动速率、时间、事件、文字
2015/04/15 Python
Python实现购物程序思路及代码
2017/07/24 Python
python实现淘宝秒杀聚划算抢购自动提醒源码
2020/06/23 Python
Atom的python插件和常用插件说明
2018/07/08 Python
Python实现微信翻译机器人的方法
2019/08/13 Python
python生成requirements.txt的两种方法
2019/09/18 Python
python如何获取apk的packagename和activity
2020/01/10 Python
在django中form的label和verbose name的区别说明
2020/05/20 Python
Python爬虫新手入门之初学lxml库
2020/12/20 Python
python中的列表和元组区别分析
2020/12/30 Python
你正在寻找的CSS3 动画技术
2011/07/27 HTML / CSS
Html5移动端弹幕动画实现示例代码
2018/08/27 HTML / CSS
公司周年庆典邀请函
2014/01/12 职场文书
试用期员工考核制度
2014/01/22 职场文书
《小池塘》教学反思
2014/02/28 职场文书
乡镇镇长个人整改措施
2014/10/01 职场文书
勇敢的心观后感
2015/06/09 职场文书
阿里云ECS云服务器快照的概念以及如何使用
2022/04/21 Servers