如何在回调函数中访问外部的变量
在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; });