call_user_func ( callback $function [, mixed $parameter [, mixed $... ]] )

调用第一个参数所提供的用户自定义的函数。
返回值:返回调用函数的结果,或FALSE。

example

  1. <?php
  2. function eat($fruit) //参数可以为多个
  3. {
  4. echo "You want to eat $fruit, no problem";
  5. }
  6. call_user_func('eat', "apple"); //print: You want to eat apple, no problem;
  7. call_user_func('eat', "orange"); //print: You want to eat orange,no problem;
  8. ?>


调用类的内部方法:

  1. <?php
  2. class myclass {
  3. function say_hello($name)
  4. {
  5. echo "Hello!$name";
  6. }
  7. }
  8. $classname = "myclass";
  9. //调用类内部的函数需要使用数组方式 array(类名,方法名)
  10. call_user_func(array($classname, 'say_hello'), 'dain_sun');
  11. //print Hello! dain_sun
  12. ?>

call_user_func_array 函数和 call_user_func 很相似,只是
使
用了数组

的传递参数形式,让参数的结构更清晰:

call_user_func_array

( callback

$function

, array
$param_arr

)

类中的回调函数最好是static的

数组中的第一个参数(类名)也可以用实例化的对象来代替。

调用用户定义的函数,参数为数组形式。
返回值:返回调用函数的结果,或FALSE。

  1. <?php
  2. function debug($var, $val)
  3. {
  4. echo "variable: $var <br> value: $val <br>";
  5. echo "<hr>";
  6. }
  7. $host = $_SERVER["SERVER_NAME"];
  8. $file = $_SERVER["PHP_SELF"];
  9. call_user_func_array('debug', array("host", $host));
  10. call_user_func_array('debug', array("file", $file));
  11. ?>


调用类的内部方法和 call_user_func 函数的调用方式一样,都是使用了数组的形式来调用。

exmaple:

  1. <?php
  2. class test
  3. {
  4. function debug($var, $val)
  5. {
  6. echo "variable: $var <br> value: $val <br>";
  7. echo "<hr>";
  8. }
  9. }
  10. $host = $_SERVER["SERVER_NAME"];
  11. $file = $_SERVER["PHP_SELF"];
  12. call_user_func_array(array('test', 'debug'), array("host", $host));
  13. call_user_func_array(array('test', 'debug'), array("file", $file));
  14. ?>


注:call_user_func
函数和call_user_func_array函数都支持引用。

    1. <?php
    2. function increment(&$var)
    3. {
    4. $var++;
    5. }
    6. $a = 0;
    7. call_user_func('increment', $a);
    8. echo $a; // 0
    9. call_user_func_array('increment', array(&$a)); // You can use this instead
    10. echo $a; // 1
    11. ?>

call_user_function()方法的使用的更多相关文章

  1. javaSE27天复习总结

    JAVA学习总结    2 第一天    2 1:计算机概述(了解)    2 (1)计算机    2 (2)计算机硬件    2 (3)计算机软件    2 (4)软件开发(理解)    2 (5) ...

  2. mapreduce多文件输出的两方法

    mapreduce多文件输出的两方法   package duogemap;   import java.io.IOException;   import org.apache.hadoop.conf ...

  3. 【.net 深呼吸】细说CodeDom(6):方法参数

    本文老周就给大伙伴们介绍一下方法参数代码的生成. 在开始之前,先补充一下上一篇烂文的内容.在上一篇文章中,老周检讨了 MemberAttributes 枚举的用法,老周此前误以为该枚举不能进行按位操作 ...

  4. IE6、7下html标签间存在空白符,导致渲染后占用多余空白位置的原因及解决方法

    直接上图:原因:该div包含的内容是靠后台进行print操作,输出的.如果没有输出任何内容,浏览器会默认给该空白区域添加空白符.在IE6.7下,浏览器解析渲染时,会认为空白符也是占位置的,默认其具有字 ...

  5. 多线程爬坑之路-Thread和Runable源码解析之基本方法的运用实例

    前面的文章:多线程爬坑之路-学习多线程需要来了解哪些东西?(concurrent并发包的数据结构和线程池,Locks锁,Atomic原子类) 多线程爬坑之路-Thread和Runable源码解析 前面 ...

  6. [C#] C# 基础回顾 - 匿名方法

    C# 基础回顾 - 匿名方法 目录 简介 匿名方法的参数使用范围 委托示例 简介 在 C# 2.0 之前的版本中,我们创建委托的唯一形式 -- 命名方法. 而 C# 2.0 -- 引进了匿名方法,在 ...

  7. ArcGIS 10.0紧凑型切片读写方法

    首先介绍一下ArcGIS10.0的缓存机制: 切片方案 切片方案包括缓存的比例级别.切片尺寸和切片原点.这些属性定义缓存边界的存在位置,在某些客户端中叠加缓存时匹配这些属性十分重要.图像格式和抗锯齿等 ...

  8. [BOT] 一种android中实现“圆角矩形”的方法

    内容简介 文章介绍ImageView(方法也可以应用到其它View)圆角矩形(包括圆形)的一种实现方式,四个角可以分别指定为圆角.思路是利用"Xfermode + Path"来进行 ...

  9. JS 判断数据类型的三种方法

    说到数据类型,我们先理一下JavaScript中常见的几种数据类型: 基本类型:string,number,boolean 特殊类型:undefined,null 引用类型:Object,Functi ...

随机推荐

  1. DEM数据如何生成高程点

    这次给大家介绍一个arcgis里的实用功能:通过地形数据提取高程点. 首先做好准备工作: 1.地形数据下载获取 2.软件准备 locaspace viewer:http://rj.baidu.com/ ...

  2. 通过浏览器https能够访问SVN,但eclipse SVN,tortoiseSVN始终连接不上SVN的问题解决方案

    为了便于本地代码维护,特意在本地搭建了一个visualSVN服务器用于本地代码管理,但是最近突然出现问题,eclipse上的SVN资源库始终连接不上,提示 "svn: connection ...

  3. This implementation is not part of the Windows Platform FIPS validated cryptographic algorithms while caching 问题及解决

    一.背景    情节1:做别的测试安装下载了软件,妈蛋结果下了百度各种捆绑软件,之后一一卸载,清洁.    情节2:做完上述动作重启电脑后,有线连接连不上,尴尬,然后下载驱动,升级之后ok了. 二.问 ...

  4. hive中拉链表

    在有些情况下,为了保持历史的一些状态,需要用拉链表来做,这样做目的在可以保留所有状态的情况下可以节省空间. 拉链表适用于以下几种情况吧 数据量有点大,表中某些字段有变化,但是呢变化的频率也不是很高,业 ...

  5. How to: Convert Between Various String Types

      This topic demonstrates how to convert various Visual C++ string types into other strings. The str ...

  6. android 开发 程序中下载安装APK文件 问题汇总 解析程序包时出现问题

    1 若把APK文件保存到应用程序的files目录下,则一定注意保存时使用 FileOutputStream os = openFileOutput(fileName, MODE_WORLD_READA ...

  7. 阿里中间件——diamond

    一.前言 最近工作不忙闲来无事,仔细分析了公司整个项目架构,发现用到了很多阿里巴巴集团开源的框架,今天要介绍的是中间件diamond. 二.diamond学习笔记 1.diamond简介 diamon ...

  8. 【原】git如何删除本地和远程的仓库

    今天操作git时遇到一个小问题:如何删除本地和远程的仓库,在网上巴拉一番解决了这个问题. 方法1: $rm testfile$git add -u $git commit -m "delet ...

  9. 《深度探索C++对象模型(Inside The C++ Object Model )》学习笔记

    转载:http://dsqiu.iteye.com/blog/1669614 第一章 关于对象 使用class封装之后的布局成本: class并没有增加成本,data members直接内含在每一个c ...

  10. phpstorm之端点跟踪

    如果在断点没有实时染色,首要请检查local与remote的代码文件的对应.