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 相关文章推荐
实用函数4
Nov 08 PHP
PHP通过header实现文本文件下载的代码
Aug 08 PHP
PHP文件打开、关闭、写入的判断与执行代码
May 24 PHP
使用php shell命令合并图片的代码
Jun 23 PHP
PHP独立Session数据库存储操作类分享
Jun 11 PHP
PHP中mysql_field_type()函数用法
Nov 24 PHP
php使用cookie实现记住用户名和密码实现代码
Apr 27 PHP
浅谈PHP链表数据结构(单链表)
Jun 08 PHP
PHP时间戳格式全部汇总 (获取时间、时间戳)
Jun 13 PHP
php数据序列化测试实例详解
Aug 12 PHP
PHP 实现人民币小写转换成大写的方法及大小写转换函数
Nov 17 PHP
yii2实现Ueditor百度编辑器的示例代码
Nov 02 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无刷新上传文件实现代码
2011/09/19 PHP
Yii中使用PHPExcel导出Excel的方法
2014/12/26 PHP
php实现基于openssl的加密解密方法
2016/09/30 PHP
Centos7安装swoole扩展操作示例
2020/03/26 PHP
IE不支持getElementsByClassName最终完美解决方案
2012/12/17 Javascript
jquery select 设置默认选中的示例代码
2014/02/07 Javascript
IE浏览器IFrame对象内存不释放问题解决方法
2014/08/22 Javascript
JavaScript运行机制之事件循环(Event Loop)详解
2014/10/10 Javascript
使用jQuery实现验证上传图片的格式与大小
2014/12/03 Javascript
JavaScript生成SQL查询表单的方法
2015/08/13 Javascript
JavaScript实现格式化字符串函数String.format
2016/12/16 Javascript
Vue.js 2.5新特性介绍(推荐)
2017/10/24 Javascript
在Vue 中使用Typescript的示例代码
2018/09/10 Javascript
微信小程序修改checkbox的样式代码实例
2020/01/21 Javascript
js中调用微信的扫描二维码功能的实现代码
2020/04/11 Javascript
vue cli3.0打包上线静态资源找不到路径的解决操作
2020/08/03 Javascript
python实现比较两段文本不同之处的方法
2015/05/30 Python
Python文件读取的3种方法及路径转义
2015/06/21 Python
利用Python获取赶集网招聘信息前篇
2016/04/18 Python
Python中的with语句与上下文管理器学习总结
2016/06/28 Python
使用python将mysql数据库的数据转换为json数据的方法
2019/07/01 Python
python 同时读取多个文件的例子
2019/07/16 Python
详解在Python中使用Torchmoji将文本转换为表情符号
2020/07/27 Python
Django配置跨域并开发测试接口
2020/11/04 Python
Python监听剪切板实现方法代码实例
2020/11/11 Python
python实现跨年表白神器--你值得拥有
2021/01/04 Python
Topshop美国官网:英国快速时尚品牌
2019/05/16 全球购物
广州御银科技股份有限公司试卷(C++)
2016/11/04 面试题
如何用Java实现列出某个目录下的所有子目录
2015/07/20 面试题
残疾人创业典型事迹
2014/02/01 职场文书
2014年民政局关于保密工作整改措施
2014/09/19 职场文书
三严三实民主生活会发言稿
2014/10/13 职场文书
学校三八妇女节活动总结
2015/02/06 职场文书
ktv服务员岗位职责
2015/02/09 职场文书
主持人大赛开场白
2015/05/29 职场文书
volatile保证可见性及重排序方法
2022/08/05 Java/Android