3

PHP で複数のネストされた関数を返したい。「break」の後に数字を追加することで、複数のループから抜け出すことができます。例えば。

while(1)
  while(1)
    while(1)
      break 3;

一連の関数を呼び出している間にサーキット ブレークを行うことはできますか?

4

7 に答える 7

3

私が知っていることではありませんが、問題の親と祖父母の機能が休憩を知ることは決してないので、それはデザインのあまり健康的でもありません。例外をスローして親でキャッチする必要があります。これにより、例外がスローされて祖父母などでキャッチされます。

于 2012-01-03T17:44:12.280 に答える
1

関数を「分割」するには、を使用できますreturn

function somefunction()
{
    return;

    echo 'This will never get displayed';
}
于 2012-01-03T17:43:20.317 に答える
1

別の解決策は、各 while に条件を追加することです。

while(1 && $isTrue)
  while(1 && $isTrue)
    while(1 && $isTrue)
      $isTrue = false;
      break;

これは非常にクリーンなアプローチだとは思いませんが。

于 2012-01-03T17:52:24.110 に答える
0

手動で述べているように、 breakはforループのみです。

于 2012-01-03T17:44:27.833 に答える
0

そのような場合に私がすることは、例外の戻り値(またはオブジェクト)を持ち、すべての関数の戻り値で戻り値の値チェックを行い、状況が適切に伝播または処理されることを確認することですが、再帰を行うときは注意してください。誤ってツリーを完全に折りたたんでしまいます...エラーのような状況で単純に終了する場合は、例外を使用することもできます。

于 2012-01-03T17:52:57.790 に答える
0

特定の条件が満たされたことを示す子関数から特別な結果を返すことができます。WordPress は WP_Error を使用してis_wp_error()、この種の操作を行います。ネストされた関数はいくつでも、呼び出された関数がエラー状態を返したかどうかを確認し、処理を続行するのではなく、そのエラーをチェーンに渡すことを選択できます。

例:

function outer() {
    $result = inner();

    // pass failure back to parent
    if( is_wp_error($result) ) {
        return $result;
    }

    // other processing

    return $final_result;
}

function inner() {
    if( some_condition() ) {
        // generate an error
        return new WP_Error( 'code', 'message' );
    }

    return $other_result;
}

$result = outer();

// did we get an error?
if( is_wp_error($result) ) {
    echo 'Something went wrong.';
} else {
    echo $result;
}
于 2012-01-03T17:55:52.747 に答える