2012-01-03 18 views
2

PHPで複数のネストされた関数を返したいと思います。 "break"の後に数字を追加することで、複数のループから脱出することが可能です。例えば。PHPの複数の関数の中断

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

同じことを機能でも実行できますか?

答えて

3

わけではありません私の知っていること、それは、また、デザインの非常に健康的ではありません。例外をスローして親にキャッチすると、例外がスローされ、祖父母などにキャッチされます。

0

機能を「中断する」には、returnを使用できます。問題の親や祖父母の機能は休憩を知っていることは決してありませんよう

function somefunction() 
{ 
    return; 

    echo 'This will never get displayed'; 
} 
+0

はいしかしLinkskuが尋ねると、あなたが複数の関数から返すことはできません。 – AsTeR

1

もう1つの解決策は、各条件に条件を追加することです。

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

これは非常にクリーンなアプローチではないと思いますが、

0

この場合、例外の戻り値(またはオブジェクト)があり、関数の戻り点ごとに戻り値をチェックして、状況が適切に伝播または処理されていることを確認します。しかし、間違ってツリーを完全に折り畳んでしまうかもしれません.... btwエラーの種類が単純な場合、例外を使用することもできます。

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; 
} 
関連する問題