2016-05-20 21 views
1

例えば、そのようなphp sub関数がmain関数を返すことはできますか?

function main(){ 
    function sub(){ 
     $a = false; 
     if(!$a) return main function; 
    } 
} 

何かが可能であるか、または同様のソリューションがありますか?

+0

サブ関数を呼び出すと、その値に応じて、サブ関数を終了するときにメイン関数で何らかの処理を行います – tektiv

+0

関数** result **またはfunction ** definition **を返しますか?これはXYの問題です。このメイン/サブ関数アプローチで解決しようとしている問題を説明する必要があります。 – Mjh

答えて

1

どうしてですか?しかし出口がなければならない。

function main($exit = false){ 
    echo 'begin main' . '<br>'; 

    if ($exit) { 
     echo 'exit main' . '<br>'; 
     return; 
    } 

    function sub(){ 
     echo 'sub' . '<br>'; 
     return main(true); 
    } 

    echo 'end main' . '<br>'; 
} 

我々はsub()を呼び出す場合、我々は致命的なエラーが発生します - main()が呼び出されたときsub()にのみ定義されます。

しかし、我々は最初のmain()を呼び出し、その後sub()場合、サブは動作します:

main(); 
// begin main 
// end main 

sub(); 
// sub 
// begin main 
// exit main 
+0

それは問題です。 sub()を呼び出すときにmain()を停止する方法は? – dioo

+0

'main()'を停止するには、誰が誰を呼び出すのかを知る必要があります。私はフラグ '$ exit'でそれを行います。 '$ exit'がfalseならば、main()が外側から呼び出され、実行を続行します。 '$ exit'が真の場合、' main() 'は' sub() 'から呼び出されますので、終了します。 –

+0

あなたはそうです。私は 'sub'関数内での復帰に気付かなかった。ありがとうございました! – dioo

0

PHPは、 "サブ機能" を持っていません。ここにあるのは2つのグローバル関数ですが、sub()は、main()が呼び出されたときにのみ定義されます。その後、それらは完全に独立した関数です。

0

メイン()あなたはのtry-catch建設への呼び出しをラップし、例外と内部機能を終了することができるように、どこかから呼び出さなければなりません:あなたはの終わりにフラグを追加することができ

try{ 
    main(); 
}catch(SubException $e){ 
    ... 
} 

function main(){ 
    function sub(){ 
     $a = false; 
     if(!$a) throw new SubException(...); 
    } 
} 
関連する問題