PHP的回调函数
所谓的回调函数,就是指调用函数时并不是向函数中传递一个标准的变量作为参数,而是将另一个函数作为参数传递到调用的函数中,这个作为参数的函数就是回调函数。通俗的来说,回调函数也是一个我们定义的函数,但是不是我们直接来调用的,而是通过另一个函数来调用的,这个函数通过接收回调函数的名字和参数来实现对它的调用。
PHP 中的回调函数与 C、Java 等语言的回调函数的作用是一模一样的,都是在函数执行的过程中,跳转到回调函数中,当回调函数执行完毕之后,再回到之前的函数处理接下来的程序。
PHP中回调函数的实现
在 PHP 中调用回调函数,不像 C、Java 等语言那样直接使用函数名作为函数参数,而是使用函数名对应的字符串名称来调用。
示例代码如下所示:
<?php
function arithmetic($funcName, $m, $n) {
return $funcName($m, $n);
}
function add($m,$n){
return $m+$n;
} $sum = arithmetic('add', 5, 9);
echo '5 + 9 ='.$sum;
运行结果如下:
5 + 9 =14
另外,PHP 还提供了两个内置函数 call_user_func() 和 call_user_func_array() 来对回调函数进行支持。这两个函数的区别是 call_user_func_array() 是以数组的形式接收回调函数的参数,而 call_user_func() 则是以具体的参数来接收回调函数参数的。
1) call_user_func()
call_user_func 函数会把第一个参数作为回调函数来调用,其语法格式如下:
call_user_func ($callback [, $parameter, ... ])
其中,第一个参数 $callback 是被调用的回调函数,其余参数是回调函数的参数,多个参数之间使用,分隔。
【示例】下面通过一个简单的示例来演示一下 call_user_func 函数的使用。
<?php
function arithmetic($funcName, $m, $n) {
return call_user_func($funcName, $m, $n);
}
function add($m,$n){
return $m+$n;
} $sum = arithmetic('add', 7, 17);
echo '7 + 17 ='.$sum;
2) call_user_func_array()
call_user_func_array 函数可以调用回调函数,并使用一个数组来作为回调函数的参数,其语法格式如下:
call_user_func_array ($callback ,$param_arr)
其中,第一个参数 $callback 是被调用的回调函数,$param_arr 是一个索引数组,用来存储需要传入回调函数中的具体参数。
【示例】下面通过一个简单的示例来演示一下 call_user_func_array 函数的使用。
<?php
function arithmetic($funcName, $m, $n) {
return call_user_func_array($funcName, array($m, $n));
}
function add($m,$n){
return $m+$n;
}
$sum = arithmetic('add', 12, 33);
echo '12 + 33 ='.$sum;
运行结果如下:
12 + 33 =45
PHP的回调函数的更多相关文章
- 小兔JS教程(三)-- 彻底攻略JS回调函数
这一讲来谈谈回调函数. 其实一句话就能概括这个东西: 回调函数就是把一个函数当做参数,传入另一个函数中.传进去的目的仅仅是为了在某个时刻去执行它. 如果不执行,那么你传一个函数进去干嘛呢? 就比如说对 ...
- 嵌入式&iOS:回调函数(C)与block(OC)传 参/函数 对比
C的回调函数: callBack.h 1).声明一个doSomeThingCount函数,参数为一个(无返回值,1个int参数的)函数. void DSTCount(void(*CallBack)(i ...
- 嵌入式&iOS:回调函数(C)与block(OC)回调对比
学了OC的block,再写C的回调函数有点别扭,对比下区别,回忆记录下. C的回调函数: callBack.h 1).定义一个回调函数的参数数量.类型. typedef void (*CallBack ...
- 理解 JavaScript 回调函数并使用
JavaScript中,函数是一等(first-class)对象:也就是说,函数是 Object 类型并且可以像其他一等对象(String,Array,Number等)一样使用.它们可以"保 ...
- 关于js的回调函数的一点看法
算了一下又有好几个月没写博客了,最近在忙公司android的项目,所以也就很少抽时间来写些东西了.刚闲下来,我就翻了翻之前看的东西.做了android之后更加感觉到手机端开发的重要性,现在做nativ ...
- JS学习:第二周——NO.1回调函数
[回调函数] 定义:把一个函数的定义阶段,作为参数,传给另一个函数: 回调函数调用次数,取决于条件: 回调函数可以传参: 回调函数可以给变this指向,默认是window: 回调函数没有返回值,for ...
- 【java回调】java两个类之间的回调函数传递
背景交代:熟悉用js开发的cordovaAPP:对java一窍不通的我,老师让做一个监测用户拍照事件的功能,无奈没有找到现成的库,无奈自己动手开发java插件~~0基础java GreenHand,祝 ...
- Java|今天起,别再扯订阅和回调函数
编程史上有两个令人匪夷所思的说辞,一个是订阅,一个是回调函数. 我想应该还有很多同学为“事件的订阅”和“回调函数”所困扰,因为事情本来就不应该按这个套路来解释. 多直白,所谓的“回调函数”你完全可以线 ...
- C++ 回调函数的定义与用法
一回调函数 我们经常在C++设计时通过使用回调函数可以使有些应用(如定时器事件回调处理.用回调函数记录某操作进度等)变得非常方便和符合逻辑,那么它的内在机制如何呢,怎么定义呢?它和其它函数(比如钩子函 ...
- 通过修改i8042prt端口驱动中类驱动Kbdclass的回调函数地址,达到过滤键盘操作的例子
同样也是寒江独钓的例子,但只给了思路,现贴出实现代码 原理是通过改变端口驱动中本该调用类驱动回调函数的地方下手 //替换分发函数 来实现过滤 #include <wdm.h> #inclu ...
随机推荐
- Transmission安装及更换官方UI
相关链接地址: Transmission镜像地址 Transmission 浏览器管理界面:Transmission Web Control UI. 创建容器 docker-compose.yaml ...
- 实时音视频入门学习:开源工程WebRTC的技术原理和使用浅析
本文由ELab技术团队分享,原题"浅谈WebRTC技术原理与应用",有修订和改动. 1.基本介绍 WebRTC(全称 Web Real-Time Communication),即网 ...
- # 个人认为windows下最好用的一批软件 #
个人认为windows下最好用的一批软件 chrome 为什么是chrome而不是edge2? 这当然不是因为我是谷歌吹什么的.其实当得知edge2比chrome更省内存,运行更快,而且不跨越城墙就能 ...
- Python 问题汇总
一. Python 环境问题 使用pytest 在terminal中执行脚本调用python3.9, 而使用pycharm 的virtualenv 执行脚本调用的是python3.10, 由于环境不一 ...
- 第四章 对称加密算法--DES--AES--IDEA--PBE
10.1.DES 已破解,不再安全,基本没有企业在用了 是对称加密算法的基石,具有学习价值 密钥长度56(JDK).56/64(BC) 10.2.DESede(三重DES) 早于AES出现来替代DES ...
- ctfshow--web9 md5二进制格加密的绕过
dirsearch 扫到robots文件 查看一下 发现有个index.phps文件 访问这个index.phps,可以下载下来 我们来审计一下这里的代码 <?php $flag="& ...
- C# 深度学习框架 TorchSharp 原生训练模型和图像识别-手写数字识别
目录 开始使用 Torch 准备 下载数据集 显示图片 加载数据集 定义网络 优化模型参数 训练模型 保存和加载模型 使用模型识别图片 教程名称:使用 C# 入门深度学习 作者:痴者工良 教程地址:h ...
- THUSC2024 & APIO2024 游记
第二次联赛以上的比赛. Day-n lxs 突然通知:从五月七日开始要去镇海中学集训(这也意味着 THUSC-APIO 中间出去玩的时间没了 ),很神秘.这是属于高二那一届考的联考连通块,不知道为什么 ...
- 单机stome安装
先安装zookeeper,参考本文件夹下安装文档 启动zookeeper 1.解压stome /opt/Server目录下 tar -zxf apache-storm-1.1.0.tar.gz 2.修 ...
- .Net 配置绑定 IOptions
准备 首先准备下appsettins.json以及目标类 appsettins.json "StudentSettings": { "Id": 1023 ...