2010-06-28 60 views
1

我想知道是否有辦法防止一個while循環過早出錯或終止。我已經在那裏拋出了一個try/catch,它似乎一直在終止。 (至於它終止的原因,我仍在調試)。你可以防止一個PHP while循環從錯誤出?

$stomp = $this->stomp; 
    if(isset($queue) && strlen($queue) > 0) { 
     error_log('Starting Monitor for: '.$queue); 
     $stomp->subscribe($queue); 

     while(true) {  
      $frame = $stomp->readFrame(); 
      if ($frame != null) { 
       // Callback must be an array: array('Class','Method); 
       if(is_array($callback) && count($callback) == 2) { 
        try { 
         $body = $frame->body;       
         $callFunct = call_user_func_array($callback,array($body,$arguments)); 
         $stomp->ack($frame);         
        } catch(StompException $e) { 
         $msg = 'Stomp Monitor readFrame() Callback Fail: '.$e->getMessage(); 
         $this->context->reportError('STOMP',array('errorDetails'=>$msg)); 
        } 
       } else { 
        error_log('Invalid Stomp Callback'); 
       } 
      } 
     } 
    } ` 

謝謝你,史蒂夫

+5

你可以給我們看一些代碼嗎?沒有看到任何東西很難說。 – Cam 2010-06-28 17:43:37

+4

請發送代碼 – 2010-06-28 17:47:01

+0

是的,有一種方法。 – JAL 2010-06-28 17:51:45

回答

0

沒有什麼打出來的循環,因此,雖然(真)將繼續,直到達到超時或某種形式的錯誤情況。作爲後備,有必要設置一個突破條件的循環,或使用一段時間的條件,你可以設置爲false;

while (true) { 
    // do some things 
    break; 
} 

$x = true; 
while ($x) { 
    // do some things 
    $x = false; 
} 

這種方式,從循環退出是你的控制之下

然而,超時和其他致命錯誤還是終止腳本正常 如果你的代碼是打破了的while循環,你應該看到一些錯誤,除非你有一個錯誤處理程序抑制它

+0

你能詳細說明你提到的錯誤處理程序嗎?除了try/catch之外的其他東西? – Steve 2010-06-28 19:31:03

+0

PHP允許您使用set_error_handler()和set_exception_handler()函數創建自定義錯誤或異常處理程序。這些建立了一個回調,當發生非致命錯誤或任何未被catch捕獲的異常時,這些回調將被調用。這些函數通常用於任何自定義錯誤/異常處理,並且可以隱藏代碼中的任何問題。 – 2010-06-28 19:38:39