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

 $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. Oracle EBS - Doc

    Oracle EBS spec.: http://vianet/IT/IT%20Dept/IT%20Project%20Update2/Active%20Projects%20%20Manufactu ...

  2. Net作业调度(二) -CrystalQuartz远程管理

    Source Code-1.6M 介绍 上篇已经了解Quartz.NET的基本使用方法了.但如果想方便的知道某个作业执行情况,需要暂停,启动等操作行为,这时候就需要个Job管理的界面. 本文介绍Qua ...

  3. 【Java并发编程实战】-----“J.U.C”:ReentrantLock之一简介

    注:由于要介绍ReentrantLock的东西太多了,免得各位客官看累,所以分三篇博客来阐述.本篇博客介绍ReentrantLock基本内容,后两篇博客从源码级别分别阐述ReentrantLock的l ...

  4. TCP状态

    TCP状态 TCP连接中包含不同的状态,如何通过状态来判断程序问题尤为重要. 三次握手 图中的connection部分为三次握手. 四次握手 图中的close部分为四次握手. CLOSE_WAIT 服 ...

  5. imagepool前端图片加载管理器(JavaScript图片连接池)

    前言 imagepool是一款管理图片加载的JS工具,通过imagepool可以控制图片并发加载个数. 对于图片加载,最原始的方式就是直接写个img标签,比如:<img src="图片 ...

  6. CWR Mobile简介

    原创地址:http://www.cnblogs.com/jfzhu/p/4266671.html 转载请注明出处 (一)CWR公司背景 Dynamics CRM除了自己Out of Box对移动设备的 ...

  7. Step by step Dynamics CRM 2011升级到Dynamics CRM 2013

    原创地址:http://www.cnblogs.com/jfzhu/p/4018153.html 转载请注明出处 (一)检查Customizations 从2011升级到2013有一些legacy f ...

  8. Eclipse安装ZooKeeper插件

    Eclipse在线安装插件奇慢的解决办法 安装ZooKeeper插件步骤如下:Step 1. 在 Eclipse 菜单打开Help -> Install New Software…Step 2. ...

  9. PHP 知识点

    __tostring()     注:能够直接输出对象 class Ren { public $name; function Run() { echo "跑"; } functio ...

  10. Python框架之Tornado(四)源码之褪去模板外衣的前戏

    执行字符串表示的函数,并为该函数提供全局变量 本篇的内容从题目中就可以看出来,就是为之后剖析tornado模板做准备,也是由于该知识点使用的巧妙,所有就单独用一篇来介绍了.废话不多说,直接上代码: # ...