2012-08-16 9 views
17

sto ottenendo a volte questo errore su produzione a:Perché 'Can not break/continue 1 level' è disponibile in PHP?

if(true == $objWebsite) { 
    $arrobjProperties = (array) $objWebsite->fetchProperties(); 
    if(false == array_key_exists($Id, $Properties)) { 
     break; 
    } 
    $strBaseName = $strPortalSuffix . '/'; 

    return $strBaseName; 
} 

$strBaseName = $strSuffix ; 
return $strBaseName; 

ho cercato di riprodurre il problema. Ma non ottenere alcun progresso. $ Id, $ Proprietà con valore ricevuto.

Qualcuno sa quando fa 'Impossibile rompere/continuare 1 livello' è in PHP?

Ho visto questo post PHP Fatal error: Cannot break/continue. Ma non ha avuto alcun aiuto.

+2

come ti aspetti che "break" si comporti in quel contesto? –

+2

Qual è il codice circostante? 'break' è utile solo nel contesto di un loop o switch. –

+0

Accade quando si utilizza l'interruzione o continua quando non si trova all'interno di un ciclo. È l'unica ragione per cui ho visto questo errore. – Tchoupi

risposta

27

Non è possibile "interrompere" da un'istruzione if. Puoi rompere solo da un loop.

Se si desidera utilizzarlo per interrompere un ciclo in una funzione di chiamata, è necessario gestirlo per valore restituito o generare un'eccezione.


metodo del valore di ritorno:

while (MyLoop) { 
    $strSecureBaseName = mySubFunction(); 
    if ($strSecureBaseName === false) { // Note the triple equals sign. 
     break; 
    } 
    // Use $strSecureBaseName; 
} 

// Function mySubFunction() returns the name, or false if not found. 

Utilizzando eccezioni - bellissimo esempio qui: http://php.net/manual/en/language.exceptions.php

<?php 
function inverse($x) { 
    if (!$x) { 
     throw new Exception('Division by zero.'); 
    } 
     else return 1/$x; 
} 

try { 
    echo inverse(5) . "\n"; 
    echo inverse(0) . "\n"; 
} catch (Exception $e) { 
    echo 'Caught exception: ', $e->getMessage(), "\n"; 
} 

// Continue execution 
echo 'Hello World'; 
?> 
2

Se all'interno di una funzione basta cambiare break; ritornare;

+1

Perché restituire? Se ci sono 0 istruzioni da eseguire dopo 'if', possiamo tornare. Ma se alcune dichiarazioni devono essere eseguite, non dovremmo tornare. –

+0

Sono d'accordo in questo caso. Dipende anche da quale logica sta cercando di applicare il blocco di codice. Ya così non sempre ritorno. – SudarP

0

Se si vuole rompere ancora da if, è possibile utilizzare while (true)

Ex.

$count = 0; 
if($a==$b){ 
    while(true){ 
     if($b==$c){ 
      $count = $count + 3; 
      break; // By this break you will be going out of while loop and execute remaining code of $count++. 
     } 
     $count = $count + 5; // 
     break; 
    } 
    $count++; 
} 

Inoltre è possibile utilizzare l'interruttore e il valore predefinito.

$count = 0; 
if($a==$b){ 
    switch(true){ 
     default: 
     if($b==$c){ 
      $count = $count + 3; 
      break; // By this break you will be going out of switch and execute remaining code of $count++. 
     } 
     $count = $count + 5; // 
    } 
    $count++; 
} 
Problemi correlati