2010-06-28 7 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

+4

pls가 코드를 보내십시오 –

+0

예, 방법이 있습니다. – JAL

답변

0

동안 그래서 시간 제한 또는 오류 조건의 형태를 돌 때까지 (참)에서 수행한다, 루프의 탈옥은 어디에도 없습니다. 대체로 상황에 따라 루프를 벗어나기 위해 휴식을 취하거나 false로 설정할 수있는 while 조건을 사용하는 것이 좋습니다.

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

또는

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

그런 식으로 루프를 종료는 코드가 돌발 경우 시간 제한 및 기타 치명적인 오류가 여전히 정상 로 스크립트를 종료

그러나 당신의 통제하에 while 루프의 오류 처리기가 없으면 일부 오류가 표시되어야합니다.

+0

언급하지 않은 오류 처리기에 대해 자세히 설명해 주시겠습니까? try/catch가 아닌 다른 것? – Steve

+0

PHP에서는 set_error_handler() 및 set_exception_handler() 함수를 사용하여 사용자 정의 오류 또는 예외 처리기를 만들 수 있습니다. 이것은 치명적이지 않은 오류가 발생할 때마다 호출되거나 catch에 의해 트랩되지 않는 예외를 호출 할 콜백을 설정합니다. 이러한 함수는 일반적으로 모든 사용자 정의 오류/예외 처리에 사용되며 코드의 모든 문제를 숨길 수 있습니다. –

관련 문제