入门指引 Server Client Process AsyncIO Memory HttpServer WebSocket 高级 其他

发布于 2015-08-09 09:52:32 | 347 次阅读 | 评论: 0 | 来源: 网络整理

在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;
});
最新网友评论  共有(0)条评论 发布评论 返回顶部

Copyright © 2007-2017 PHPERZ.COM All Rights Reserved   冀ICP备14009818号  版权声明  广告服务