2016-04-27 8 views
1

"return"キーワードのPHPのToplevelと同等の機能ブロックですか?機能ブロック外の "return"キーワードのPHPにおけるToplevelと同等ですか?

returnキーワードの素敵な、有用な特性は、それが呼び出されたときに、 はそれはそれは関係なく、他の ネストされたブロックは、それを囲むことができるどのように多くの、ではありませんした主な機能ブロックを終了していることです。

トップレベルのスコープに相当するものは認識していません。 は、関数 を関数の "展開"の系統的な方法で呼び出すことをお勧めします。そのためにはをコード内のすべてのreturnに対処する体系的な方法を知る必要があります。

$searchResult=seekAUnicorn();の拡大は、このようなものに見えるかもしれません

function seekAUnicorn() 
{ 
    for($i=1;some_test($i);$i++) { 
     for($j=1;some_test($j);$j++) { 
      for($k=1;some_test($k);$k++) { 
      if(unicorn_test_for_three_parameters($i,$j,$k)) return(array($i,$j,$k)); 
      } 
      if(unicorn_test_for_two_parameters($i,$j)) return(array($i,$j)); 
     } 
     if(unicorn_test_for_one_parameter($i)) return(array($i)); 
    } 
} 

例えば考えてみましょう:

for($i=1;some_test($i);$i++) { 
     for($j=1;some_test($j);$j++) { 
      for($k=1;some_test($k);$k++) { 
      if(unicorn_test_for_three_parameters($i,$j,$k)) { 
       $searchResult = array($i,$j,$k); 
       break 3; 
      } 
      } 
      if(unicorn_test_for_two_parameters($i,$j)) { 
      $searchResult = array($i,$j); 
      break 2; 
      } 
     } 
     if(unicorn_test_for_one_parameter($i)){ 
      $searchResult = array($i); 
      break; 
     } 
    } 

をしかし、このようにそれを行うには、あなたはそれぞれの周りのネストされたブロック の数をカウントする必要があります入れ子にされた戻り値は、長くて複雑なコード のために苦労してエラーを起こしやすくなります。もっと簡単な方法はありますか?

+0

PHPでは動作しないCおよびC++用のソリューションがあります。これはPHPの質問であり、CまたはC++の質問ではありません。タグの削除 – Leandros

+0

@Leandrosご協力ありがとうございます。好奇心から、CとC++のための解決策は何ですか? –

+0

'goto'。これは一般的に使用されるソリューションです。 – Leandros

答えて

1

あなたの場合、goto(PHP 5.3以降)を使用するか、別の簡単なチェックを追加することができます。

$loopcheck = true; 
for($i=1;some_test($i) && $loopcheck;$i++) { 
     for($j=1;some_test($j) && $loopcheck;$j++) { 
      for($k=1;some_test($k) && $loopcheck;$k++) { 
      if(unicorn_test_for_three_parameters($i,$j,$k)) { 
       $searchResult = array($i,$j,$k); 
       $loopcheck = false; 
       break; 
      } 
      } 
      if(unicorn_test_for_two_parameters($i,$j)) { 
      $searchResult = array($i,$j); 
      $loopcheck = false; 
      break; 
      } 
     } 
     if(unicorn_test_for_one_parameter($i)){ 
      $searchResult = array($i); 
      $loopcheck = false; 
     } 
    } 
+0

ありがとう!まさに私が探していたもの。 –

関連する問題