web-dev-qa-db-fra.com

Pourquoi «ne peut pas casser / continuer 1 niveau» vient en PHP?

Je reçois parfois cette erreur sur la production à:

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

    return $strBaseName;
}

$strBaseName = $strSuffix ;
return $strBaseName;

J'ai essayé de reproduire ce problème. Mais pas de progrès. $ Id, $ Propriétés ayant une valeur reçue.

Est-ce que quelqu'un sait quand 'Cannot break/continue 1 level' est-il disponible en PHP?

J'ai vu ce post Erreur fatale PHP: Impossible de casser/continuer . Mais je n'ai reçu aucune aide.

21
Somnath Muluk

Vous ne pouvez pas "casser" une instruction if. Vous ne pouvez rompre qu’une boucle.

Si vous souhaitez l'utiliser pour rompre une boucle dans une fonction appelante, vous devez gérer cela par valeur de retour - ou lever une exception.


Méthode de la valeur de retour:

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.

Utiliser des exceptions - bel exemple ici: 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';
?>
32
Robbie

Si dans une fonction, changez simplement break; rendre;

2
SudarP

Si vous voulez toujours rompre avec if, vous pouvez utiliser 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++;
}

Vous pouvez également utiliser switch et default.

$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++;
}
1
Somnath Muluk