在实际开发中通常会遇到这样的问题,决定调用某个函数是通过传入的参数决定的,例如:

 $functionName=$_post['functionName'];

接着我们需要访问一个叫$functionName的方法,PHP有一个内置函数call_user_func,该函数允许用户调用直接写的函数并传入一定的参数:

1、最普通的调用:

 <?php
function order($a,$b)
{
echo $a;
echo $b;
}
call_user_func('order', "","");
?>

2、调用类内部的方法

 <?php
class utils {
function class1($a)
{
echo $a;
}
}
call_user_func(array("utils", "class1"),"");
?>

3、call_user_func_array函数类似于call_user_func,前者将传递的参数放到了一个数组中

 <?php
function class1($a, $b)
{
echo $a;
echo $b;
}
call_user_func_array('class1', array("", ""));
?>

4、call_user_func_array函数也可以这么玩

 <?php
Class Class1
{
function person($b, $c) {
echo $b;
echo $c;
}
}
call_user_func_array(array('Class1','person'), array("", ""));
?>

call_user_func调用自定义函数

调用第一个参数提供的自定义函数,后面的参数为自定义函数的参数,返回自定义函数的结果

 function say($word)
{
echo $word;
}
call_user_func('say', 'hello world'); //当然也可以调用类中的方法:
class A {
function say($word = '')
{
echo $word;
}
}
$a = new A(); //注意,必须是要实例化的,除非是static
call_user_func(array($a, 'say'), 'hello world'); //hello world

call_user_func_array调用自定义函数

 function a($word)
{
echo $word;
}
class A {
function say($word = '')
{
echo $word;
}
}
call_user_func_array('a', array('hello world'));
$a = new A(); //注意,必须是要实例化的,除非是static
call_user_func_array(array($a, 'say'), array('hello world'));  //只是传入参数有点区别

两个函数都支持引用:

 <?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函数都支持引用。 function increment(&$var)
{
$var++;
}
$a = ;
call_user_func('increment', $a);
echo $a;
call_user_func_array('increment', array(&$a));
echo $a;
?>

PHP之call user func()函数的更多相关文章

  1. go语言从例子开始之Example12.func函数

    函数 是 Go 的中心.我们将通过一些不同的例子来进行学习. Example: package main import "fmt" //定义一个函数使用关键字func //函数名名 ...

  2. 通过队列实现进程间的通信(使用阻塞方式调用func函数)

    #_author:来童星#date:2019/12/17#通过队列实现进程间的通信from multiprocessing import Poolimport osimport timedef fun ...

  3. golang基础--func函数

    函数function Go函数不支持 嵌套, 重载和默认参数 支持以下特性: 无须声明原型,不定长度长度变参,多返回值,命名返回值参数,匿名函数,闭包 定义函数使用关键字func,且左侧大括号不能另起 ...

  4. lambda的Func<>函数

    Func<int,int,int> fc=(int x,int y)=>x*y;Console.WriteLine(fc(5, 2)); //声明一个方法,返回值为int,参数是两个 ...

  5. "函中函" -------------------- func2(func) -------------- 函数名可以当做函数的参数

    def func(): print("吃了么")def func2(fn): print("我是func2") fn() # 执⾏传递过来的fn # 即 fn替 ...

  6. python基础补漏-04-常用函数

    ----lambda 首先我们说,很遗憾 在python中lambda 仅仅只是一个表达式 那么如何去使用呢? 这个是lambda最简单的使用方式  一般跟map一起配合使用 --map (fun,l ...

  7. 窥探Swift之函数与闭包的应用实例

    今天的博客算是比较基础的,还是那句话,基础这东西在什么时候都是最重要的.说到函数,只要是写过程序就肯定知道函数是怎么回事,今天就来讨论一下Swift中的函数的特性以及Swift中的闭包.今天的一些小实 ...

  8. 【转载】JS中bind方法与函数柯里化

    原生bind方法 不同于jQuery中的bind方法只是简单的绑定事件函数,原生js中bind()方法略复杂,该方法上在ES5中被引入,大概就是IE9+等现代浏览器都支持了(有关ES5各项特性的支持情 ...

  9. Python3 函数

    函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段. 函数能提高应用的模块性,和代码的重复利用率.你已经知道Python提供了许多内建函数,比如print().但你也可以自己创建函数,这 ...

随机推荐

  1. 【转】POJ题目分类推荐 (很好很有层次感)

    OJ上的一些水题(可用来练手和增加自信) (poj3299,poj2159,poj2739,poj1083,poj2262,poj1503,poj3006,poj2255,poj3094)初期: 一. ...

  2. fasicon.js (无二维码版,如需要js创建二维码版本可联系我:770959294@qq.com)

    /*** Created by 张云山 on 2016/12/9.*/(function(wins,doct){wins.fasicon = function(){this.name = " ...

  3. 赵文豪 GDB调试汇编堆栈过程分析

    GDB调试汇编堆栈过程分析 使用gcc - g example.c -o example -m32指令在64位的机器上产生32位汇编,然后使用gdb example指令进入gdb调试器: 使用gdb调 ...

  4. USACO翻译:USACO 2013 DEC Silver三题

    USACO 2013 DEC SILVER 一.题目概览 中文题目名称 挤奶调度 农场航线 贝西洗牌 英文题目名称 msched vacation shuffle 可执行文件名 msched vaca ...

  5. LA

    grmon -altjtag -u 公式rand()%(b-a),是求范围随机数的计算公式,%是做求余运算,正整数对n求余的范围肯定是在0~n-1之间,也就是rand()%(b-a)的范围是0~b-a ...

  6. POS与EPOS区别

    本文分文三个部分来介绍,第一部分是两个概念(POS与EPOS),第三部分是 POS与EPOS的区别. 一.epos ( electronic point of sale ) 俗称电话pos机: .EP ...

  7. Git ignore UserInterfaceState.xcuserstate

    1. 退出xcdoe, 打开终端(Terminal),进入到你的项目目录下 2. 在终端键入  git rm --cached [YourProjectName].xcodeproj/project. ...

  8. HTML5- Canvas入门(一)

    周老虎落网的时候,网易跟腾讯都推出了牛逼轰轰的HTML5页面来展示其关系网(网易http://news.163.com/special/data_zyk/  ,腾讯http://news.qq.com ...

  9. node基本理念(事件、多线程、进程)

    关于node的几点理解: 1.所谓的node单线程,是指node的event loop,也就是我们的业务脚本是跑在一个单线程中的,可以理解为主线程: 2.若存在IO操作,例如文件.网络,是单独在线程里 ...

  10. Got the Best Employee of the year 2015 Star Award

    Got "The Best Employee of the year 2015 Star Award" from the company, thanks to all that h ...