定时器发送问题

0

代码如下:


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(); 这一行报错 不知道是什么原因

已邀请:

damao - phper

赞同来自:

哈哈 匿名函数里不能用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 - 后台服务器开发人员

赞同来自:

可以的,非常感谢!

要回复问题请先登录注册