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 相关文章推荐
通过ODBC连接的SQL SERVER实例
Oct 09 PHP
基于php无限分类的深入理解
Jun 02 PHP
php中的Base62类(适用于数值转字符串)
Aug 12 PHP
destoon找回管理员密码的方法
Jun 21 PHP
PHP文件缓存类实现代码
Oct 26 PHP
yii2超好用的日期组件和时间组件
May 05 PHP
一个简单的php路由类
May 29 PHP
基于CI(CodeIgniter)框架实现购物车功能的方法
Apr 09 PHP
PHP微信支付结果通知与回调策略分析
Jan 10 PHP
php 策略模式原理与应用深入理解
Sep 25 PHP
laravel 去掉index.php伪静态的操作方法
Oct 12 PHP
php设计模式之正面模式实例分析【星际争霸游戏案例】
Mar 24 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字符串比较函数strcmp()和strcasecmp()使用总结
2014/11/19 PHP
php生成图片验证码-附五种验证码
2015/08/19 PHP
php curl批处理实现可控并发异步操作示例
2018/05/09 PHP
Thinkphp5+plupload实现的图片上传功能示例【支持实时预览】
2019/05/08 PHP
php7 图形用户界面GUI 开发示例
2020/02/22 PHP
jQuery 判断页面元素是否存在的代码
2009/08/14 Javascript
js创建表单元素并使用submit进行提交
2014/08/14 Javascript
jQuery中[attribute=value]选择器用法实例
2014/12/31 Javascript
深入理解(function(){... })();
2016/08/16 Javascript
Ajax+FormData+javascript实现无刷新表单信息提交
2016/10/24 Javascript
vue 2.0路由之路由嵌套示例详解
2017/05/08 Javascript
ES6中的rest参数与扩展运算符详解
2017/07/18 Javascript
vue自动化表单实例分析
2018/05/06 Javascript
vue实现动态添加数据滚动条自动滚动到底部的示例代码
2018/07/06 Javascript
vue.js提交按钮时进行简单的if判断表达式详解
2018/08/08 Javascript
angularJs中json数据转换与本地存储的实例
2018/10/08 Javascript
9102年webpack4搭建vue项目的方法步骤
2019/02/20 Javascript
JS实现的自定义map方法示例
2019/05/17 Javascript
如何给element添加一个抽屉组件的方法步骤
2019/07/14 Javascript
jQuery实现的移动端图片缩放功能组件示例
2020/05/01 jQuery
python通过get,post方式发送http请求和接收http响应的方法
2015/05/26 Python
Linux系统上Nginx+Python的web.py与Django框架环境
2015/12/25 Python
谈谈Python进行验证码识别的一些想法
2016/01/25 Python
Python使用Matplotlib实现Logos设计代码
2017/12/25 Python
django解决订单并发问题【推荐】
2019/07/31 Python
Django如何使用redis作为缓存
2020/05/21 Python
澳大利亚在线百货商店:Real Smart
2017/08/13 全球购物
员工合理化建议书
2014/05/19 职场文书
施工工地安全标语
2014/06/07 职场文书
廉政教育的心得体会
2014/09/01 职场文书
刑事辩护授权委托书
2014/09/13 职场文书
助学贷款贫困证明
2014/09/23 职场文书
单位委托书格式范本
2014/09/29 职场文书
金砖之国观后感
2015/06/11 职场文书
《你在为谁工作》心得体会(共8篇)
2016/01/20 职场文书
苹果发布了MagSafe固件更新,可以不外接电源实现最高7.5W充电
2022/04/21 数码科技