『PHP』浅析callback回调函数
发布日期:2021-06-28 20:00:29 浏览次数:2 分类:技术文章

本文共 1881 字,大约阅读时间需要 6 分钟。

文章目录

前言

努力学习中,目前对回调函数的思想还是不能很好地理解,如有错误欢迎前往评论区留言

一、callback回调函数定义

直接运行一个函数被称为直调

# 直调

而通过一个函数(中间函数)调用另一个函数(回调函数)被称为回调,中间函数已经定义好回调函数执行完成后的其他动作了,我们在主程序直接调用此中间函数即可

回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应。

# 回调# run()是中间函数# hello()是回调函数# 回调是通过call_user_func()实现的
";}function hello($param){
echo "hello".$param."
"; } run("hello", 1);

“你到一个商店买东西,刚好你要的东西没有货,于是你在店员那里留下了你的电话,过了几天店里有货了,店员就打了你的电话,然后你接到电话后就到店里去取了货。在这个例子里,你的电话号码就叫回调函数,你把电话留给店员就叫登记回调函数,店里后来有货了叫做触发了回调关联的事件,店员给你打电话叫做调用回调函数,你到店里去取货叫做响应回调事件。回答完毕。“

(摘自知乎 作者:常溪玲)

二、call_user_func()和call_user_func_array()

PHP使用call_user_func()和call_user_func_array()回调

# 函数原型call_user_func ( callable $callback , mixed $parameter = ? , mixed $... = ? ) : mixedcall_user_func_array ( callable $callback , array $param_arr ) : mixed

二者区别在于前者传参上散装的,后者传参上需要封成array

三、回调的实现

Ⅰ、回调普通函数

"}call_user_func('test', 1, 2);call_user_func_array('test', array(1, 2));

Ⅱ、回调类函数

第一个传参为array,包含对象名和函数名,需实例化

'; } public static t2($a){
echo 'static t2'.$a.'
'; }}$test = new Test();call_user_func(array($test, 't1'), 1);

Ⅲ、回调类静态函数

第一个传参为array,包含类名和函数名,无需实例化

'; } public static t2($a){
echo 'static t2'.$a.'
'; }}call_user_func(array('Test', 't2'), 1);

四、为什么不采用$func()?

回到最开始的示例代码

";}function hello($param){
echo "hello".$param."
";} run("hello", 1);

最开始很是不能理解为什么不修改成以下的写法:

";}function hello($param){
echo "hello".$param."
";}run(1);

回调和直调其实并无区别,回调只是借助了一个中间函数间接调用另一个函数

使用回调的目的是:run函数可能是一个系统级函数、或者是其他我们无权修改的函数,而hello这个函数我们是可以自定义的,因此在中间函数调用的时候不能写的太具体,通过传参来达到一个类似接口的操作,这种采用回调的方法提高了中间函数-回调函数的灵活性:

";}function hello($param){
echo "hello".$param."
"; }function nihao($param){
echo "nihao".$param."
"; }function bonjour($param){
echo "bonjour".$param."
"; } run("hello", 1);run("nihao", 2);run("bonjour", 3);

如果打算新添加函数,那么在中间函数使用回调就很方便灵活了,直接对中间函数传入新添加的回调函数名称即可运行,这就体现了回调函数提高灵活性的作用了

转载地址:https://blog.csdn.net/Xxy605/article/details/117631156 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:『Ruby』循环语句
下一篇:『Ruby』判断语句

发表评论

最新留言

不错!
[***.144.177.141]2024年04月09日 07时22分39秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

深入解析Android-AutoLayout,全网疯传 2019-04-29
深入解析android核心组件和应用框架,最全Android知识总结 2019-04-29
深入解析android核心组件和应用框架,社招面试心得 2019-04-29
深度解析跳槽从开始到结束完整流程,持续更新中 2019-04-29
深度解析跳槽从开始到结束完整流程,面试真题解析 2019-04-29
hashmap扩容过程,字节大神强推千页PDF学习笔记,经典好文 2019-04-29
kotlin面试题!Android大厂高频面试题解析,薪资翻倍 2019-04-29
kotlin面试题!一口气拿了9家公司的offer,已拿offer入职 2019-04-29
retrofit优点,互联网寒冬公司倒闭后,年薪50W 2019-04-29
retrofit原理面试,Android性能优化最佳实践,面试必备 2019-04-29
【工作感悟】Android多进程从头讲到尾,offer拿到手软 2019-04-29
【微信小程序】面试一路绿灯Offer拿到手软,好文推荐 2019-04-29
Android之内存泄漏调试学习与总结,分享PDF高清版 2019-04-29
事件分发机制怎么回答,Android开发究竟该如何学习,使用指南 2019-04-29
事件分发机制流程图,带你全面理解View的绘制流程,附大厂真题面经 2019-04-29
Android最强进程保活黑科技实现原理解密及方法,含BATJM大厂 2019-04-29
Android最强进程保活黑科技实现原理解密及方法,帮你突破瓶颈 2019-04-29
Android架构师教你如何突破瓶颈,内含福利 2019-04-29
Android架构组件Room功能详解,全网独家首发! 2019-04-29
android查看网络请求和响应,我的移动开发春季历程,隔壁都馋哭了 2019-04-29