PHP回调函数概念与用法实例分析


Posted in PHP onNovember 03, 2017

本文实例讲述了PHP回调函数概念与用法。分享给大家供大家参考,具体如下:

一、回调函数的概念

先看一下C语言里的回调函数:回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应。

其他语言里的回调函数的概念与之相似,只不过各种语言里回调函数的实现机制不一样,通俗的来说,回调函数是一个我们定义的函数,但是不是我们直接来调用,而是通过另一个函数来调用,这个函数通过接收回调函数的名字和参数来实现对它的调用。

二、php中回调函数的实现

php提供了两个内置函数call_user_func()call_user_func_array()提供对回调函数的支持。这两个函数的区别是call_user_func_array是以数组的形式接收回调函数的参数的,看它的原型就知道了:mixed call_user_func_array ( callable $callback ,array$param_arr ),它只有两个参数。而call_user_func($callback,参数1,参数2,…)的参数个数根据回调函数的参数来确定的。

如何实现对脚本中全局函数、类中未使用$this的非静态方法、类中使用$this的非静态方法(需要传入对象)、类中静态方法的回调呢,下面是测试通过的代码。

<?php
//普通函数
function f1($arg1,$arg2)
{
  echo __FUNCTION__.'exec,the args is:'.$arg1.' '.$arg2;
  echo "<br/>";
}
//通过call_user_func调用函数f1
call_user_func('f1','han','wen');
  //通过call_user_func_array调用函数
call_user_func_array('f1',array('han','wen'));
class A
{
  public $name;
  function show($arg1)
  {
    echo 'the arg is:'.$arg1."<br/>";
    echo 'my name is:'.$this->name;
    echo "<br/>";
  }
  function show1($arg1,$arg2)
  {
    echo __METHOD__.' exec,the args is:'.$arg1.' '.$arg2."<br/>";
  }
  public static function show2($arg1,$arg2)
  {
    echo __METHOD__.' of class A exec, the args is:'.$arg1.' '.$arg2."<br/>";
  }
}
//调用类中非静态成员函数,该成员函数中有$this调用了对象中的成员
$a = new A;
$a->name = 'wen';
call_user_func_array(array($a,'show',),array('han!'));
//调用类中非静态成员函数,没有对象被创建,该成员函数中不能有$this
call_user_func_array(array('A','show1',),array('han!','wen'));
//调用类中静态成员函数
call_user_func_array(array('A','show2'),array('argument1','argument2'));

运行结果:

f1exec,the args is:han wen
f1exec,the args is:han wen
the arg is:han!
my name is:wen
A::show1 exec,the args is:han! wen
A::show2 of class A exec, the args is:argument1 argument2

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
《PHP边学边教》(01.开篇――准备工作)
Dec 13 PHP
PHP 设置MySQL连接字符集的方法
Jan 02 PHP
php 中英文语言转换类
Sep 07 PHP
PHP写UltraEdit插件脚本实现方法
Dec 26 PHP
PHP+MYSQL中文乱码问题
Jul 01 PHP
分享50个提高PHP执行效率的技巧
Dec 26 PHP
Laravel5中Cookie的使用详解
May 03 PHP
php简单生成一组与多组随机字符串的方法
May 09 PHP
PHP实现阿里大鱼短信验证的实例代码
Jul 10 PHP
PHP中PDO事务处理操作示例
May 02 PHP
PHP-FPM的配置与优化讲解
Mar 15 PHP
linux mint下安装phpstorm2020包括JDK部分的教程详解
Sep 17 PHP
PHP实现字符串翻转功能的方法【递归与循环算法】
Nov 03 #PHP
PHP空值检测函数与方法汇总
Nov 19 #PHP
使用PHPStorm+XDebug搭建单步调试环境
Nov 19 #PHP
php利用云片网实现短信验证码功能的示例代码
Nov 18 #PHP
swoole和websocket简单聊天室开发
Nov 18 #PHP
php单元测试phpunit入门实例教程
Nov 17 #PHP
PHP开发之归档格式phar文件概念与用法详解【创建,使用,解包还原提取】
Nov 17 #PHP
You might like
网站加速 PHP 缓冲的免费实现方法
2006/10/09 PHP
php+jquery编码方面的一些心得(utf-8 gb2312)
2010/10/12 PHP
PHP实现适用于文件内容操作的分页类
2016/06/15 PHP
PHP实现带重试功能的curl连接示例
2016/07/28 PHP
php的对象传值与引用传值代码实例讲解
2021/02/26 PHP
基于jquery的获取浏览器窗口大小的代码
2011/03/28 Javascript
根据经纬度计算地球上两点之间的距离js实现代码
2013/03/05 Javascript
JavaScript代码复用模式详解
2014/11/07 Javascript
jQuery可见性过滤器:hidden和:visibility用法实例
2015/06/24 Javascript
JavaScript数组去重的3种方法和代码实例
2015/07/01 Javascript
JavaScript框架是什么?怎样才能叫做框架?
2015/07/01 Javascript
jQuery Validation Plugin验证插件手动验证
2016/01/26 Javascript
ionic实现带字的toggle滑动组件
2016/08/27 Javascript
javascript ASCII和Hex互转的实现方法
2016/12/27 Javascript
angular使用post、get向后台传参的问题实例
2017/05/27 Javascript
浅谈Webpack下多环境配置的思路
2018/06/27 Javascript
小程序rich-text组件如何改变内部img图片样式的方法
2019/05/22 Javascript
layer.prompt输入层的例子
2019/09/24 Javascript
python统计文本文件内单词数量的方法
2015/05/30 Python
Python迭代器和生成器定义与用法示例
2018/02/10 Python
python 寻找list中最大元素对应的索引方法
2018/06/28 Python
查找python项目依赖并生成requirements.txt的方法
2018/07/10 Python
python实现机器学习之元线性回归
2018/09/06 Python
opencv实现静态手势识别 opencv实现剪刀石头布游戏
2019/01/22 Python
python函数声明和调用定义及原理详解
2019/12/02 Python
Python读取JSON数据操作实例解析
2020/05/18 Python
树莓派升级python的具体步骤
2020/07/05 Python
大学生学习2014年全国两会心得体会
2014/03/12 职场文书
机械专业求职信
2014/05/25 职场文书
音乐教师求职信
2014/06/28 职场文书
小学学校门卫岗位职责
2014/08/03 职场文书
春节超市活动方案
2014/08/14 职场文书
经典搞笑版检讨书
2015/02/19 职场文书
麦田里的守望者读书笔记
2015/06/30 职场文书
Node与Python 双向通信的实现代码
2021/07/16 Javascript
Apache Hudi的多版本清理服务彻底讲解
2022/03/31 Servers