请问web-msg-sender 无法引用自定义的array吗?

mdys

// 全局数组保存uid在线数据

$uidConnectionMap = array();
$live_agent_arr=array(); //自定义了个函数,在 $socket->on( 'login', function ( $uid )use( $socket ) 引用是null的,不解

echo "is_arraya-".is_array($live_agent_arr)." is_nulla-".is_null($live_agent_arr)." is_stringa-".is_string($live_agent_arr)."\n\n";

// PHPSocketIO服务
$sender_io = new SocketIO( 2120 );
// 客户端发起连接事件时,设置连接socket的各种事件回调
$sender_io->on( 'connection', function ( $socket ) {
    // 当客户端发来登录事件时触发

    $socket->on( 'login', function ( $uid )use( $socket ) {
        global $uidConnectionMap,$last_online_count,$last_online_page_count,$live_agent_arr;
        // 已经登录过了

        if ( isset( $socket->uid ) ) {
            return;
        }
        // 更新对应uid的在线数据
        $uid = ( string )$uid;
        if ( !isset( $uidConnectionMap ) ) {
            $uidConnectionMap = 0;
        }

        echo "is_arrayb-".is_array($uidConnectionMap)." is_nullb-".is_null($uidConnectionMap)." is_stringb-".is_string($uidConnectionMap)."\n\n"; //执行结果 is_array($uidConnectionMap) 可以 true
        echo "is_array-".is_array($live_agent_arr)." is_null-".is_null($live_agent_arr)." is_string-".is_string($live_agent_arr)."\n\n";  //执行结果 is_array($live_agent_arr) 是flase, is_null($live_agent_arr)=true

        // 这个uid有++$uidConnectionMap个socket连接
        ++$uidConnectionMap;

        if(isset($live_agent_arr)){
            array_push( $live_agent_arr, array( "exten" => $uid, "channel" => "" ) );
        }
        // 将这个连接加入到uid分组,方便针对uid推送数据
        $socket->join( $uid );
        $socket->uid = $uid;

    } );

} );

执行结果如下:
图片
 
我十分不理解的是,为何 我自己定义的$live_agent_arr 在 function ($uid) use($socket) 是 null, 而例子里自带的$uidConntionMap可以正常使用? 我该怎么样使用自己定义的array?请各位大神不吝赐教,小白跪谢!!!
 

2106 2 0
2个回答

walkor

workerman本身并没有改变php的任何特性或者语法。
 如果$uidConnectionMap 和 $live_agent_arr 如果是在函数里定义的,根据php的机制,2个默认不是全局数组。
你可以用 global关键字来声明他们。
 
global $uidConnectionMap = array();
global $live_agent_arr = array();
 
 
 

  • 暂无评论
mdys

感谢大神回复!
额 ,我最终还是没搞定,  global $live_agent_arr = array(); 我用这种写法获取全局得到的是null   ,  用例子里自带的 $uidConnectionMap 是可以获取到值的,没搞清楚是为什么, 就是很不理解为何我自己写的 $live_agent_arr 获取不到. 最终改用了  http://doc.workerman.net/components/global-data-server.html

  • 暂无评论
年代过于久远,无法发表回答
🔝