在PHP中打破多个函数

时间:2012-01-03 17:41:30

标签: php

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

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

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

6 个答案:

答案 0 :(得分:3)

不是我知道的,它也不是很健康的设计,因为有问题的父母和祖父母的功能永远不会知道休息。您应该抛出异常并将其捕获到父级上,而父级又会抛出异常并将其捕获到祖父母等上。

答案 1 :(得分:1)

要“断开”功能,您可以使用return

function somefunction()
{
    return;

    echo 'This will never get displayed';
}

答案 2 :(得分:1)

另一个解决方案是为每个人添加一个条件。

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

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

答案 3 :(得分:0)

As the manual states break仅适用于循环。

答案 4 :(得分:0)

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

答案 5 :(得分: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;
}