2012-08-16 11 views
17

Me estoy haciendo a veces este error en la producción en:¿Por qué 'Can not break/continue 1 level' viene en PHP?

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

    return $strBaseName; 
} 

$strBaseName = $strSuffix ; 
return $strBaseName; 

He intentado reproducir este problema. Pero no obteniendo ningún progreso. $ Id, $ Propiedades que tienen valor recibido.

¿Alguien sabe cuándo aparece "No se puede romper/continuar 1 nivel" en PHP?

He visto este post PHP Fatal error: Cannot break/continue. Pero no recibió ninguna ayuda.

+2

¿cómo esperas que 'break' se comporte en ese contexto? –

+2

¿Cuál es el código que lo rodea? 'break' solo es útil en el contexto de un bucle o interruptor. –

+0

Ocurre cuando se usa la pausa o continúa cuando no está dentro de un ciclo. Es la única razón por la que he visto este error. – Tchoupi

Respuesta

27

No se puede "romper" de una instrucción if. Solo puedes salir de un bucle.

Si desea utilizarlo para salir de un bucle en una función de llamada, necesita manejar esto por valor de retorno - o lanzar una excepción.


método de Valor de retorno:

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. 

El uso de excepciones - bello ejemplo aquí: 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

Si dentro de una función sólo cambia ruptura; regresar;

+1

¿Por qué regresas? Si hay 0 sentencias para ejecutar después de 'if', entonces podemos regresar. Pero si algunas declaraciones necesitan ejecutarse, entonces no deberíamos regresar. –

+0

Estoy de acuerdo en ese caso. También depende de qué lógica esté intentando aplicar ese bloque de código. Ya no siempre regresas – SudarP

0

Si desea sin pérdidas de if, puede utilizar 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++; 
} 

También puede usar el interruptor y el predeterminado.

$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++; 
} 
Cuestiones relacionadas