浅析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 相关文章推荐
文章推荐系统(二)
Oct 09 PHP
在PHP中使用与Perl兼容的正则表达式
Nov 26 PHP
php+AJAX传送中文会导致乱码的问题的解决方法
Sep 08 PHP
PHP定时执行计划任务的多种方法小结
Dec 19 PHP
PHP小教程之实现链表
Jun 09 PHP
PHP中读取文件的8种方法和代码实例
Aug 05 PHP
php获取网页上所有链接的方法
Apr 03 PHP
phpMyAdmin安装并配置允许空密码登录
Jul 04 PHP
PHP如何获取当前主机、域名、网址、路径、端口等参数
Jun 09 PHP
tp5(thinkPHP5)框架连接数据库的方法示例
Dec 24 PHP
php查询内存信息操作示例
May 09 PHP
PHP使用CURL实现下载文件功能示例
Jun 03 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
数据库的日期格式转换
2006/10/09 PHP
PHP中使用CURL伪造来路抓取页面或文件
2011/05/04 PHP
完美解决PHP中的Cannot modify header information 问题
2013/08/12 PHP
10个值得深思的PHP面试题
2016/11/14 PHP
Yii2语言国际化的配置教程
2018/08/19 PHP
利用ASP发送和接收XML数据的处理方法与代码
2007/11/13 Javascript
js压缩工具 yuicompressor 使用教程
2010/03/31 Javascript
JavaScript排序算法之希尔排序的2个实例
2014/04/04 Javascript
javascript快速排序算法详解
2014/09/17 Javascript
谈一谈bootstrap响应式布局
2016/05/23 Javascript
jQuery中事件与动画的总结分享
2016/05/24 Javascript
实现JavaScript高性能的数据存储
2016/12/11 Javascript
javascript算法之二叉搜索树的示例代码
2017/09/12 Javascript
React BootStrap用户体验框架快速上手
2018/03/06 Javascript
vue2.0页面前进刷新回退不刷新的实现方法
2018/07/31 Javascript
微信小程序云开发如何使用云函数生成二维码
2019/05/18 Javascript
vue-cli3.0实现一个多页面应用的历奇经历记录总结
2020/03/16 Javascript
js校验开始时间和结束时间
2020/05/26 Javascript
vue+springboot+element+vue-resource实现文件上传教程
2020/10/21 Javascript
[56:13]DOTA2-DPC中国联赛定级赛 LBZS vs Phoenix BO3第一场 1月10日
2021/03/11 DOTA
python 示例分享---逻辑推理编程解决八皇后
2014/07/20 Python
详解Python中的动态属性和特性
2018/04/07 Python
使用python读取csv文件快速插入数据库的实例
2018/06/21 Python
对Python3中bytes和HexStr之间的转换详解
2018/12/04 Python
Python实现字符串匹配的KMP算法
2019/04/04 Python
python抖音表白程序源代码
2019/04/07 Python
HTML5中微数据概述及在搜索引擎中的使用举例
2013/02/07 HTML / CSS
施华洛世奇德国官网:SWAROVSKI德国
2017/02/01 全球购物
尤妮佳moony海外旗舰店:日本殿堂级纸尿裤品牌
2018/02/23 全球购物
美国户外运动商店:Sun & Ski
2018/08/23 全球购物
如何从一个文件档案的尾端新增记录
2016/12/02 面试题
浅谈react路由传参的几种方式
2021/03/23 Javascript
应届生法律顾问求职信
2013/11/19 职场文书
幼儿园六一儿童节主持节目串词
2014/03/21 职场文书
党员组织生活会发言材料
2014/10/17 职场文书
2015暑期社会实践通讯稿
2015/07/18 职场文书