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 相关文章推荐
打造计数器DIY三步曲(中)
Oct 09 PHP
PHP 生成的XML以FLASH获取为乱码终极解决
Aug 07 PHP
PHP 的ArrayAccess接口 像数组一样来访问你的PHP对象
Oct 12 PHP
preg_match_all使用心得分享
Jan 31 PHP
ThinkPHP实现将本地文件打包成zip下载
Jun 26 PHP
WordPress中注册菜单与调用菜单的方法详解
Dec 18 PHP
编写PHP程序检查字符串中的中文字符个数的实例分享
Mar 17 PHP
PHP函数引用返回的实例详解
Sep 11 PHP
PHP实现接收二进制流转换成图片的方法
Jan 10 PHP
PHP 进度条函数的简单实例
Sep 19 PHP
php 字符串中是否包含指定字符串的多种方法
Apr 12 PHP
php高性能日志系统 seaslog 的安装与使用方法分析
Feb 29 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
非常好用的Zend Framework分页类
2014/06/25 PHP
学习php设计模式 php实现适配器模式
2015/12/07 PHP
ThinkPHP整合datatables实现服务端分页的示例代码
2018/02/10 PHP
php设计模式之享元模式分析【星际争霸游戏案例】
2020/03/23 PHP
laravel7学习之无限级分类的最新实现方法
2020/09/30 PHP
js实现点击注册按钮开始读秒倒计时的小例子
2013/05/11 Javascript
js判断url是否有效的两种方法
2014/03/04 Javascript
jQuery实现在新增加的元素上添加事件方法案例分析
2017/02/09 Javascript
纯JS实现只能输入数字的简单代码
2017/06/21 Javascript
基于jQuery的表单填充实例
2017/08/22 jQuery
inner join 内联与left join 左联的实例代码
2017/09/18 Javascript
RequireJS用法简单示例
2018/08/20 Javascript
对angularjs框架下controller间的传值方法详解
2018/10/08 Javascript
微信小程序导航栏滑动定位功能示例(实现CSS3的positionsticky效果)
2019/01/24 Javascript
微信小程序配置服务器提示验证token失败的解决方法
2019/04/03 Javascript
JavaScript:ES2019 的新特性(译)
2019/08/08 Javascript
Python监控主机是否存活并以邮件报警
2015/09/22 Python
python定时利用QQ邮件发送天气预报的实例
2017/11/17 Python
Python反射的用法实例分析
2018/02/11 Python
python os用法总结
2018/06/08 Python
python复制列表时[:]和[::]之间有什么区别
2018/10/16 Python
浅谈在django中使用redirect重定向数据传输的问题
2020/03/13 Python
几款好用的python工具库(小结)
2020/10/20 Python
教师自我鉴定范文
2013/11/10 职场文书
大学生旷课检讨书
2014/01/22 职场文书
舞蹈比赛获奖感言
2014/02/04 职场文书
三好学生演讲稿范文
2014/04/26 职场文书
小学生国庆演讲稿
2014/09/05 职场文书
信用卡结清证明怎么写
2014/09/13 职场文书
护士求职自荐信
2015/03/25 职场文书
毕业论文指导老师意见
2015/06/04 职场文书
公司出差管理制度范本
2015/08/05 职场文书
生日宴会祝酒词
2015/08/10 职场文书
《检阅》教学反思
2016/02/22 职场文书
导游词之永泰公主墓
2019/12/04 职场文书
nginx简单配置多个server的方法
2021/03/31 Servers