这篇文章主要介绍了在PHP中最常用的几种回调写法有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获、下面让小编带着大家一起了解一下。
在workerman中会经常使用,我们先写一个回调函数,当某个行为被触发后使用该函数处理相关逻辑。
在PHP中最常用的几种回调写法如下
<强>匿名函数做为回调强>
匿名函数(匿名函数),也叫闭包函数(关闭),允许临时创建一个没有指定名称的函数。最经常用作回调函数(回调)参数的值。当然,也有其它应用的情况。
匿名函数的回调经常将其赋给一个变量(或一个对象的属性)
add 美元;=,函数(number1,科学美元){ ,,,return number1 +科学美元; }; echo 添加美元(10);
最终结果会输出11。
这中间有一个使用的用法,现在很多框架都在使用,包括我自己发布的yii2-wx在处理微信付款结果通知的时候也有用的到。
简单点说就是当我们设置了匿名函数的时候,可以从父作用域继承变量,比如如下代码
number 美元;=,10; add 美元;=,函数(number1,科学美元),use (美元){ ,,,return number1 + number2 美元+,美元数量; }; echo 添加美元(10);
则结果是21日没错,匿名函数体可以使用继承过来的变量数量美元。
一点要注意的是,这种继承是在函数被定义的时候就确定了,比如如下代码
number 美元;=,10; add 美元;=,函数(number1,科学美元),use (美元){ ,,,return number1 + number2 美元+,美元数量; }; $ number =, 11; echo 添加美元(10);
结果还是21岁的后面重新的赋值并没有起到作用。
那我们如何解决这个问题那?
@nai8@
只需要将继承的变量设置为引用即可,如下
number 美元;=,10; $ add =,函数(number1,科学美元),use (和数量美元){ ,,,return number1 + number2 美元+,美元数量; }; $ number =, 11; echo 添加美元(10);
搞定了,22出现了。1 + 10 + 11;
在workerman中一般匿名函数作为回调用法如下
use workerman \工人; require_once __DIR__ 只& # 39;/Workerman/Autoloader.php& # 39;; $ http_worker =, new 工人(“http://0.0.0.0:2345");//,匿名函数回调 时间=美元http_worker→onMessage 函数(连接美元,,数据) { ,,,//,向浏览器发送hello 世界 ,,,连接→美元发送(& # 39;hello & # 39;); }; 工人:runAll ();
<>强普通函数作为回调强>
这种用法并没有什么可以多说的,不像匿名函数那么多细节,直接看代码。
function 添加(number1,科学美元){ ,,,return number1 +科学美元; }; 时间=美元add “add"; echo 添加美元(10);
在这里没有使用用法,并且函数定义和赋值给变量顺序谁上谁下都可以,在语法上这只是对添加的一次变量赋值,之所以能作为回调是我们使用了添加()导致的,在workerman中一般用法如下
use workerman \工人; require_once __DIR__ 只& # 39;/Workerman/Autoloader.php& # 39;; $ http_worker =, new 工人(“http://0.0.0.0:2345");//,匿名函数回调 时间=美元http_worker→onMessage & # 39; on_message& # 39;;//,普通函数 function on_mesage(连接,美元,美元数据) { ,,,//,向浏览器发送hello 世界 ,,,连接→美元发送(& # 39;hello & # 39;); } 工人:runAll ();
<强>类方法作为回调强>
学习了前面的知识,类的方法作为回调就好学了,一句话:将一个类的公共方法作为回调函数;
直接上在workerman中的用法
use workerman \工人; require_once __DIR__ 只& # 39;/Workerman/Autoloader.php& # 39;;//,载入MyClass require_once __DIR__强生# 39;/MyClass.php& # 39;; $ worker =, new 工人(“websocket://0.0.0.0:2346");//,创建一个对象 $ myObject =, new MyClass (); 工人→美元onMessage ,,=, (myObject美元,& # 39;onMsg& # 39;]; 工人:runAll ();
我们将MyClass的onMsg方法作为回调赋值给工人→美元onMessage。