2012-01-03 26 views
2

我想在PHP中返回多个嵌套函数。通过在“break”之后添加一个数字,可以打破多个循环。例如。在PHP中突破多个函数

while(1) 
    while(1) 
    while(1) 
     break 3; 

我可以用功能做同样的事吗?

回答

3

不是我所知道的,它也不是很健康的设计,因为有问题的父母和祖父母功能永远不会知道中断。你应该抛出一个异常,并把它赶上父母,这反过来会抛出一个异常,并将其赶上祖父母等。

0

要“突破”功能,您可以使用return

function somefunction() 
{ 
    return; 

    echo 'This will never get displayed'; 
} 
+0

是但Linksku问你不能从多个函数返回。 – AsTeR 2012-01-03 17:45:02

1

另一种解决方案是为每个时间添加一个条件。

while(1 && $isTrue) 
    while(1 && $isTrue) 
    while(1 && $isTrue) 
     $isTrue = false; 
     break; 

虽然我不认为这是一个非常干净的方法。

0

我在这种情况下做的是有一个异常返回值(或对象),并对每个函数返回值的返回值进行值检查,以确保情况得到适当的传播或处理,在做递归时要小心不过,你可能会错误地将树完全折叠起来......顺便说一句,如果它是一个简单的退出错误的情况下你也可以使用异常。

0

可能从子函数返回一个特殊结果,表示已满足特定条件。 WordPress使用WP_Error和is_wp_error()进行这种操作。任何数量的嵌套函数都可以检查被调用的函数是否返回错误状态,并选择将错误传递给链而不是继续处理。

例子:

function outer() { 
    $result = inner(); 

    // pass failure back to parent 
    if(is_wp_error($result)) { 
     return $result; 
    } 

    // other processing 

    return $final_result; 
} 

function inner() { 
    if(some_condition()) { 
     // generate an error 
     return new WP_Error('code', 'message'); 
    } 

    return $other_result; 
} 

$result = outer(); 

// did we get an error? 
if(is_wp_error($result)) { 
    echo 'Something went wrong.'; 
} else { 
    echo $result; 
}