在功能块之外的 PHP 中等效的“return”关键字的顶级等效项


Toplevel equivalent in PHP of "return" keyword outside function block?

在功能块之外的 PHP 中等效的 "return" 关键字?

return 关键字的一个很好的、有用的属性是,当它被调用时,它退出它所在的主功能块,无论有多少其他功能嵌套块可能围绕它。

我不知道顶级范围有任何等效项。我想要拥有系统的方式来"扩展"功能调用等效的语句列表,为此我需要知道一种处理代码中所有return的系统方法。

例如考虑

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));
   }
} 

$searchResult=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))  {
              $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;
        } 
   } 

但是要做到这一点,你需要计算嵌套块的数量在每个嵌套回波周围,这变得艰苦且容易出错更长、更复杂的代码。有没有更简单的方法?

在您的情况下,您可以使用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;
        } 
   }