web-dev-qa-db-ja.com

PHPで「1レベルを解除できない/継続できない」というのはなぜですか?

私は時々本番でこのエラーを受け取ります:

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

    return $strBaseName;
}

$strBaseName = $strSuffix ;
return $strBaseName;

この問題を再現しようとしました。しかし、進展はありません。受け取った値を持つ$ Id、$ Properties。

PHPで「1レベルを解除/継続できない」がいつリリースされるのか知っていますか?

私はこの投稿を見ました PHP致命的なエラー:中断/続行できません 。しかし、何の助けもありませんでした。

21
Somnath Muluk

Ifステートメントから「ブレーク」することはできません。ループから抜けることしかできません。

これを使用して呼び出し元の関数のループから抜ける場合は、戻り値でこれを処理するか、例外をスローする必要があります。


戻り値メソッド:

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.

例外の使用-ここの美しい例: 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

関数内であれば、ブレークを変更するだけです。戻る;

2
SudarP

それでもifから抜けたい場合は、while(true)を使用できます

例.

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

また、スイッチとデフォルトを使用できます。

$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