Toplevel相当于PHP的"返回"功能块外的关键字?
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;
}
}
但要这样做,您需要计算嵌套块的数量 围绕每个嵌套返回,这变得艰苦而且容易出错 更长,更复杂的代码。有更简单的方法吗?
答案 0 :(得分: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;
}
}