2010-06-28 14 views
1

Je me demandais s'il y avait un moyen d'empêcher une boucle d'erreur prématurée de se terminer ou de se terminer prématurément. J'ai jeté un essai/catch là et il semble continuer à se terminer. (Quant à la raison pour laquelle il se termine, je suis toujours en train de déboguer).pouvez-vous empêcher un php tandis que la boucle d'erreur?

$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'); 
       } 
      } 
     } 
    } ` 

Merci, Steve

+5

Pouvez-vous nous donner du code à regarder? C'est difficile à dire sans rien voir. – Cam

+4

pls envoyer le codez –

+0

Oui, il y a un moyen. – JAL

Répondre

0

Il n'y a rien à sortir de la boucle, de sorte while (true) se poursuivra jusqu'à ce qu'il frappe un délai d'attente ou une certaine forme de condition d'erreur. En tant que solution de repli, il vaut mieux définir une pause pour sortir de la boucle à la condition, ou utiliser une condition while que vous pouvez définir sur false;

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

ou

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

De cette façon, la sortie de la boucle est sous votre contrôle

Cependant, les délais d'attente et d'autres erreurs fatales se terminent toujours le script comme normal Si votre code éclate de la boucle while, vous devriez voir une erreur, sauf si vous avez un gestionnaire d'erreur qui le supprime

+0

Pourriez-vous élaborer sur le gestionnaire d'erreur que vous avez mentionné pour le supprimer? Quelque chose d'autre qu'un essai/attraper? – Steve

+0

PHP vous permet de créer des gestionnaires d'erreurs ou d'exceptions personnalisés à l'aide des fonctions set_error_handler() et set_exception_handler(). Ceux-ci établissent un rappel qui sera appelé chaque fois qu'une erreur non fatale se produit, ou toute exception qui n'est pas interceptée par un catch. Ces fonctions sont généralement utilisées pour toute gestion personnalisée des erreurs/exceptions et peuvent masquer tous les problèmes du code. –

Questions connexes