代碼如下:
1public static $db = null;
2 public static function onWorkerStart($worker)
3 {
4 //創(chuàng)建mysql實(shí)例
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});
新建了一個(gè)mysql類(lèi)的靜態(tài)成員,保存數(shù)據(jù)庫(kù)實(shí)例。然后在onMessage有個(gè)定時(shí)器,每隔三秒鐘發(fā)送最新的gps給客戶(hù)端,以上是代碼邏輯。但是出現(xiàn)了報(bào)錯(cuò),報(bào)錯(cuò)信息如下
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(); 這一行報(bào)錯(cuò) 不知道是什么原因
哈哈 匿名函數(shù)里不能用self。因?yàn)槟涿瘮?shù)不屬于任何類(lèi)的方法。
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 ));
});
這樣應(yīng)該可行,你試下