2012-12-02 61 views
-1

我正在嘗試在服務器上爲我創建的遊戲設置一個計時器,但我不斷收到'調用成員函數stop() 「對象」錯誤。錯誤:調用非對象上的成員函數

要開始的時候,我提出以下Ajax調用

$.post('game.php', { 
    action: 'start' 
}, function(res) { 
},'json'); 

當比賽結束我嘗試做以下Ajax調用

$.post('game.php', { 
    action: 'stop' 
}, function(res) { 
},'json'); 

game.php代碼停止計時器是

$action = $_POST['action']; 

switch($action) { 
case 'start': 
    $gameTime = new timer(); 
    $gameTime->start(); 
    break; 
case 'stop': 
    $gameTime->stop(); 
    break; 
} 

class Timer { 

    var $classname = "Timer"; 
    var $start  = 0; 
    var $stop  = 0; 
    var $elapsed = 0; 

    # Constructor 
    function Timer($start = true) { 
     if ($start) 
     $this->start(); 
    } 

    # Start counting time 
    function start() { 
     $this->start = $this->_gettime(); 
    } 

    # Stop counting time 
    function stop() { 
     $this->stop = $this->_gettime(); 
     $this->elapsed = $this->_compute(); 
    } 

    # Get Elapsed Time 
    function elapsed() { 
     if (!$elapsed) 
     $this->stop(); 

     return $this->elapsed; 
    } 

    # Get Elapsed Time 
    function reset() { 
     $this->start = 0; 
     $this->stop = 0; 
     $this->elapsed = 0; 
    } 

    #### PRIVATE METHODS #### 

    # Get Current Time 
    function _gettime() { 
     $mtime = microtime(); 
     $mtime = explode(" ", $mtime); 
     return $mtime[1] + $mtime[0]; 
    } 

    # Compute elapsed time 
    function _compute() { 
     return $this->stop - $this->start; 
    } 
} 

當我打電話來停止計時器,我得到的錯誤。 我試圖找出有什麼不對,並想知道是否因爲我正在做Ajax調用?

有沒有人知道一種方法來得到這個工作?

+2

你知道PHP腳本**完成時會終止**嗎?您將無法打開/關閉計時器一段時間,因爲一旦腳本結束,計時器對象消失 –

回答

1

switch($action) { 
case 'start': 
    $gameTime = new timer(); 
    $gameTime->start(); 
    break; 
case 'stop': 
        <-----there should be $gameTime = new timer(); 
    $gameTime->stop(); 
    break; 
} 

應該

switch($action) { 
    case 'start': 
     $gameTime = new timer(); 
     $gameTime->start(); 
     break; 
    case 'stop': 
    $gameTime = new timer(); 
     $gameTime->stop(); 
     break; 

} 

,或者嘗試

$gameTime = new timer(); 
     switch($action) { 
    case 'start': 

     $gameTime->start(); 
     break; 
    case 'stop': 

     $gameTime->stop(); 
     break; 

} 
+0

這將修復語法錯誤,但不修復提問者的邏輯。 –

+0

每次使用$ gameTime = new timer();我都不會得到新的定時器嗎?導致停止時間= 0?我想我應該抓住遊戲開始時的時間,將它寫入數據庫,然後抓住遊戲結束的時間,並與數據庫中的數據進行比較。這聽起來對你們來說是最好的方式嗎? – Damian

0

在你停止的情況下,你有一個像你在開始的情況下做初始化計時器。

相關問題