我想知道是否有办法阻止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');
}
}
}
} `
谢谢, 史蒂夫
答案 0 :(得分:0)
没有什么可以突破循环,所以while(true)将一直持续到达到超时或某种形式的错误状态。作为后备,值得设置一个中断以突破循环条件,或者使用一个可以设置为false的while条件;
while (true) {
// do some things
break;
}
或
$x = true;
while ($x) {
// do some things
$x = false;
}
这样,退出循环就在你的掌控之中
但是,超时和其他致命错误仍然会正常终止脚本 如果你的代码突然出现在while循环中,你应该看到一些错误,除非你有一个错误处理程序来抑制它