多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
# 如何在回调函数中访问外部的变量 [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; }); ~~~