Вы можете предотвратить цикл php while от ошибок? - PullRequest
1 голос
/ 28 июня 2010

Мне было интересно, есть ли способ предотвратить преждевременный сбой или прерывание цикла 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');
                }
            }
        }
    }   `

Спасибо, Стив

1 Ответ

0 голосов
/ 28 июня 2010

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

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

или

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...