2012-08-16 21 views
17

Ich erhalte manchmal diese Fehler auf der Produktion an:Warum gibt es in PHP PHP nicht?

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

    return $strBaseName; 
} 

$strBaseName = $strSuffix ; 
return $strBaseName; 

habe ich versucht, dieses Problem zu reproduzieren. Aber keinen Fortschritt. $ Id, $ Eigenschaften, die einen Wert erhalten haben.

Weiß jemand, wann kommt 'Kann nicht brechen/1 Level weitermachen' kommt in PHP?

Ich habe diesen Beitrag gesehen PHP Fatal error: Cannot break/continue. Aber habe keine Hilfe bekommen.

+2

Wie erwarten Sie, dass 'break' sich in diesem Kontext verhält? –

+2

Was ist der umgebende Code? 'break' ist nur im Zusammenhang mit einer Schleife oder einem Schalter nützlich. –

+0

Es passiert, wenn Sie brechen oder fortfahren, wenn Sie nicht innerhalb einer Schleife sind. Es ist der einzige Grund, warum ich diesen Fehler gesehen habe. – Tchoupi

Antwort

27

Sie können nicht von einer if-Anweisung "brechen". Sie können nur von einer Schleife trennen.

Wenn Sie es verwenden möchten, um aus einer Schleife in einer aufrufenden Funktion zu brechen, müssen Sie dies durch Rückgabewert behandeln - oder eine Ausnahme auslösen.


Rückgabewert Methode:

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. 

Ausnahmen verwenden - schönes Beispiel hier: 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

Wenn innerhalb einer Funktion nur Pause ändern; zurückgeben;

+1

Warum zurück? Wenn nach "if" 0 Anweisungen ausgeführt werden sollen, können wir zurückkehren. Aber wenn einige Anweisungen ausgeführt werden müssen, sollten wir nicht zurückkehren. –

+0

Ich stimme in diesem Fall zu. Es hängt auch davon ab, welche Logik dieser Codeblock anzuwenden versucht. Du kommst nicht immer zurück. – SudarP

0

Wenn Sie wollen immer noch von if brechen, können Sie 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++; 
} 

Auch Sie können Schalter und Standard verwenden.

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