2010-06-28 6 views
1

Мне было интересно, существует ли способ предотвратить цикл while из-за преждевременной ошибки или завершения. Я бросил попытку/поймать там, и, похоже, он заканчивается. (Что касается причины, по которой он заканчивается, я все еще отлаживаю).Можете ли вы предотвратить ошибку PHP-цикла?

$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

+4

отправить отправить код –

+0

Да, есть способ. – JAL

ответ

0

Там нет ничего, чтобы вырваться из петли, так что пока (истина) будет продолжать до тех пор, пока не попадает тайм-аут или иной форме ошибки. В качестве резервной копии стоит установить разрыв, чтобы выйти из цикла при условии, или использовать условие while, которое вы можете установить на false;

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

или

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

таким образом, выход из цикла находится под вашим контролем

Однако таймауты и другие фатальные ошибки до сих пор завершить сценарий как обычный Если ваш код вспыхивает из цикла while вы должны увидеть некоторую ошибку, если у вас нет обработчика ошибок, подавляющего его.

+0

Не могли бы вы рассказать о обработчике ошибок, о котором вы говорили, чтобы его подавить? Что-то другое, чем попытка/уловка? – Steve

+0

PHP позволяет создавать собственные обработчики ошибок или исключений, используя функции set_error_handler() и set_exception_handler(). Они устанавливают обратный вызов, который будет вызываться всякий раз, когда возникает нефатальная ошибка, или любое исключение, которое не попадает в ловушку улова. Эти функции обычно используются для любой обработки ошибок/исключений и могут скрывать любые проблемы в коде. –

Смежные вопросы