如何在回调函数中访问外部的变量
最后更新于:2022-04-02 06:25:07
# 如何在回调函数中访问外部的变量
[TOC]
在swoole\_server/swoole\_client的事件回调函数中,需要读取调用外部的变量和对象,可以通过下面的几种方法实现。
## 一、事件回调函数改用对象+属性
~~~
class Server
{
public $buffer;
public $serv;
function onReceive($serv, $fd, $from_id, $data)
{
//在这里可以读取到EventCallback对象上的属性和方法
$this->buffer[$fd] = $data;
$this->hello();
}
function hello()
{
}
function run()
{
$serv = new swoole_server('127.0.0.1', 9501);
$this->serv = $serv;
$serv->on('receive', array($this, 'onReceive'));
$serv->start();
}
}
$server= new Server;
$server->run();
~~~
## 二、使用全局变量
~~~
$buffer = array();
$serv->on('receive', function($serv, $fd, $from_id, $data) {
global $buffer;
$buffer[$fd] = $data;
});
~~~
## 三、使用类静态变量
~~~
class Test
{
static $buffer;
}
$serv->on('receive', function($serv, $fd, $from_id, $data) {
Test::$buffer[$fd] = $data;
});
~~~
## 四、匿名函数中使用use语法
~~~
$buffer = array();
$serv->on('receive', function($serv, $fd, $from_id, $data) use ($buffer) {
$buffer[$fd] = $data;
});
~~~
> 需要PHP5.4或更高的版本
> 多个参数可以用逗号隔开,如use ($buffer, $users, $config)
## 五、直接保存在swoole\_server/swoole\_client对象上
~~~
$serv->buffer = array();
$serv->on('receive', function($serv, $fd, $from_id, $data) use ($buffer) {
$serv->buffer[$fd] = $data;
});
~~~
';