2012-01-03 58 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; 
}