定时器发送问题

bijingjieshen

代码如下:

1public static $db = null;
2 public static function onWorkerStart($worker)
3    {
4        //创建mysql实例
5        self::$db = new Workerman\MySQL\Connection('localhost', '3306', 'root', 'idriver', 'jdwuliu');
6    ...
7    }
8
9public static function onMessage($client_id, $data) {
10    $timer_id = Timer::add(3, function()use($client_id)
11    $gps_data = self::$db->select('gps_lon,gps_lat')->from("gps")->orderByDESC(array('u_id'))->limit(1)->query();
12    Gateway::sendToClient($client_id, json_encode($gps_data ));
13});

新建了一个mysql类的静态成员,保存数据库实例。然后在onMessage有个定时器,每隔三秒钟发送最新的gps给客户端,以上是代码逻辑。但是出现了报错,报错信息如下

PHP Fatal error: Cannot access self:: when no class scope is active in 11

就是在 $gps_data = self::$db->select('gps_lon,gps_lat')->from("gps")->orderByDESC(array('u_id'))->limit(1)->query(); 这一行报错 不知道是什么原因

3523 2 0
2个回答

damao

哈哈 匿名函数里不能用self。因为匿名函数不属于任何类的方法。

public static function onMessage($client_id, $data) {
        $db = self::$db;
        $timer_id = Timer::add(3, function()use($client_id, $db)
        $gps_data = $db->select('gps_lon,gps_lat')->from("gps")->orderByDESC(array('u_id'))->limit(1)->query();
        Gateway::sendToClient($client_id, json_encode($gps_data ));
});

这样应该可行,你试下

  • 暂无评论
bijingjieshen

可以的,非常感谢!

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