ThinkSSL🔒 一键申购 5分钟快速签发 30天无理由退款 购买更放心 广告
# 如何在回调函数中访问外部的变量 在swoole_server/swoole_client的事件回调函数中,需要读取调用外部的变量和对象,可以通过下面的几种方法实现。 * * * * * [TOC=2,3] * * * * * ## 一、事件回调函数改用对象+属性 ~~~php 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(); ~~~ ## 二、使用全局变量 ~~~php $buffer = array(); $serv->on('receive', function($serv, $fd, $from_id, $data) { global $buffer; $buffer[$fd] = $data; }); ~~~ ## 三、使用类静态变量 ~~~php class Test { static $buffer; } $serv->on('receive', function($serv, $fd, $from_id, $data) { Test::$buffer[$fd] = $data; }); ~~~ ## 四、匿名函数中使用use语法 ~~~php $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对象上 ~~~php $serv->buffer = array(); $serv->on('receive', function($serv, $fd, $from_id, $data) use ($buffer) { $serv->buffer[$fd] = $data; }); ~~~