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

Somnath Muluk picture Somnath Muluk · Aug 16, 2012 · Viewed 41.7k times · Source

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.

Answer

Robbie picture Robbie · Aug 16, 2012

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';
?>