Search code examples
phpif-statementfatal-error

Why does 'Cannot break/continue 1 level' comes in PHP?


I am getting sometimes this error on production at:

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

    return $strBaseName;
}

$strBaseName = $strSuffix ;
return $strBaseName;

I have tried to reproduce this issue. But not getting any progress. $Id, $Properties having value received.

Does anyone know when does 'Cannot break/continue 1 level' comes in PHP?

I have seen this post PHP Fatal error: Cannot break/continue. But didn't got any help.


Solution

  • You can't "break" from an if statement. You can only break from a loop.

    If you want to use it to break from a loop in a calling function, you need to handle this by return value - or throw an exception.


    Return value method:

    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.
    

    Using exceptions - beautiful example here: 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';
    ?>