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