在功能块之外的 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;
}
}