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

 $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. 最短路(代码来源于kuangbin和百度)

    最短路 最短路有多种算法,常见的有一下几种:Dijstra.Floyd.Bellman-Ford,其中Dijstra和Bellman-Ford还有优化:Dijstra可以用优先队列(或者堆)优化,Be ...

  2. js_截取Url值

    "total" -->传递参数时的名字 var reg = new RegExp("(^|&)" + "total" + &q ...

  3. C++文本处理_文件读写

    QT在进行文本读写时和C++一样,是基于文本流操作的. QT在读取全部文本时,相对比较便捷.使用readAll()函数,配合split()进行分隔符的拆分(例如行结束符"\n"), ...

  4. syntax error near unexpected token‘(

    用虚拟机的时候出现这样的: 上网查了资料之后,在括号"( " 前加上"$"字符就暂时不会提示出错了.

  5. 1 background(复合属性)与font(复合属性) 2 行内块的间距问题 3 行内元素的margin 4 清除浮动 5定位的元素的层级 6 Border-radius: 边框半径

    1 background(复合属性)与font(复合属性): background: 颜色  图片的链接  是否平铺  背景位置 是否滚动.(可以随意调动或省略) Font: 粗度 字体风格 字体大小 ...

  6. Call for Papers International Conference for Smart Health (ICSH) 2014

    Call for PapersInternational Conference for Smart Health (ICSH) 2014 Beijing, China July 10-11, 2014 ...

  7. Setting Up KeePass For Centos 6

    This mini-howto describes how to set up KeePass on Centos 6. It requires building mono from source a ...

  8. JavaScript学习笔记之string

    字符串定义: 1,var myString=“内容”:or var myString=‘内容’ 2,var myString= new String(“内容”)           ---〉创建对象, ...

  9. Objective-C 观察者模式--简单介绍和使用

    观察者模式(有时又被称为发布-订阅模式) 在此种模式中,一个目标物件管理所有相依于它的观察者物件,并且在它本身的状态改变时主动发出通知. 这通常透过呼叫各观察者所提供的方法来实现.此种模式通常被用来实 ...

  10. Java,extends,继承

    1. 继承的概念: 继承在本职上是特殊--一般的关系.子类继承父类,表明子类是一种特殊的父类,并且具有父类所不具有的一些属性或方法. 2. 继承中的初始化顺序: 从类的结构上而言,其内部可以有如下四种 ...