在workerman中会常常运用,我们先写一个回调函数,当某个行动被触发后运用该函数处置惩罚相干逻辑。
在PHP中最经常使用的几种回调写法以下
匿名函数做为回调
匿名函数(Anonymous functions),也叫闭包函数(closures),许可暂时建立一个没有指定称号的函数。最常经常使用作回调函数(callback)参数的值。固然,也有别的运用的状况。
匿名函数的回调常常将其赋给一个变量(或一个对象的属性)
$add = function($number1,$number2){ return $number1+$number2; }; echo $add(1,10);
终究效果会输出11。
这中心有一个use的用法,如今许多框架都在运用,包含我本身宣布的 yii2-wx 在处置惩罚微信付款效果关照的时刻也有用到。
简朴点说就是当我们设置了匿名函数的时刻,能够从父作用域继续变量,比方以下代码
$number = 10; $add = function($number1,$number2) use ($number){ return $number1+$number2 + $number; }; echo $add(1,10);
则效果是21,没错,匿名函数体能够运用继续过来的变量 $number。
一点要注意的是,这类继续是在函数被定义的时刻就肯定了,比方以下代码
$number = 10; $add = function($number1,$number2) use ($number){ return $number1+$number2 + $number; }; $number = 11; echo $add(1,10);
效果照样21,背面从新的赋值并没有起到作用。
那我们怎样处理这个问题那?
@nai8@
只须要将继续的变量设置为援用即可,以下
$number = 10; $add = function($number1,$number2) use (&$number){ return $number1+$number2 + $number; }; $number = 11; echo $add(1,10);
搞定了,22涌现了。1 + 10 + 11;
在workerman中平常匿名函数作为回调用法以下
use Workerman\Worker; require_once __DIR__ . '/Workerman/Autoloader.php'; $http_worker = new Worker("http://0.0.0.0:2345"); // 匿名函数回调 $http_worker->onMessage = function($connection, $data) { // 向浏览器发送hello world $connection->send('hello world'); }; Worker::runAll();
一般函数作为回调
这类用法并没有什么能够多说的,不像匿名函数那么多细节,直接看代码。
function add($number1,$number2){ return $number1+$number2; }; $add = "add"; echo $add(1,10);
在这里没有use用法,而且函数定义和赋值给变量递次谁上谁下都能够,在语法上这只是对add的一次变量赋值,之所以能作为回调是我们运用了add() 致使的,在workerman中平常用法以下
use Workerman\Worker; require_once __DIR__ . '/Workerman/Autoloader.php'; $http_worker = new Worker("http://0.0.0.0:2345"); // 匿名函数回调 $http_worker->onMessage = 'on_message'; // 一般函数 function on_mesage($connection, $data) { // 向浏览器发送hello world $connection->send('hello world'); } Worker::runAll();
类要领作为回调
进修了前面的学问,类的要领作为回调就好学了,一句话:将一个类的大众要领作为回调函数;
直接上在workerman中的用法
use Workerman\Worker; require_once __DIR__ . '/Workerman/Autoloader.php'; // 载入MyClass require_once __DIR__.'/MyClass.php'; $worker = new Worker("websocket://0.0.0.0:2346"); // 建立一个对象 $myObject = new MyClass(); $worker->onMessage = [$myObject, 'onMsg']; Worker::runAll();
我们将MyClass的onMsg要领作为回调赋值给$worker->onMessage。
类静态要领做为回调
这个最简朴了,看代码。
use Workerman\Worker; require_once __DIR__ . '/Workerman/Autoloader.php'; // 载入MyClass require_once __DIR__.'/MyClass.php'; $worker = new Worker("websocket://0.0.0.0:2346"); $worker->onMessage = [$myObject, 'onMsg']; Worker::runAll();
我们将MyClass的静态要领onMsg要领作为回调赋值给worker->onMessage,由于是静态要领,在onMsg内不能用this哈。
以上就是进修workerman之前须要晓得的几种php回调写法的细致内容,更多请关注ki4网别的相干文章!