2012-06-10 84 views
1

我想寫一個條件,我想知道我的函數是否需要返回值或它可以作爲一個過程執行。基本上它應該看起來像:有沒有辦法檢查函數是否需要返回值時調用

foo($x) { 
    $x++; 
    echo $x; 
    if(is_return_needed()) { 
     return $x; 
    } 
} 

其中is_return_needed()是條件,如果需要返回值。

它應該如何工作:

echo foo(50); // should print AND return 51 
bar(foo(50)); // should print AND return 51 to bar() function 
foo(50); // should only print the value, because the returned value will not be used 

請不要告訴我沒有理由這樣做。我知道我可以發送一個額外的布爾參數給函數,這將是條件,但是有沒有更好的方法來實現這一點?

+0

爲什麼不在任何情況下都返回$ x? – csupnig

+3

的確,如果不使用返回值,它不會對代碼造成任何問題。做一些奇怪的上下文檢查肯定會減慢你的代碼。 – Zefiryn

+0

,如果你真的想要這樣的東西,只要做:'foo($ x,$ return_needed = false){... return($ return_needed)? $ x:null; }',但正如@ Zefiryn所說,這只是沒關係...... – giorgio

回答

1

返回一個對象(或一個大字符串),PHP將而不是複製該對象/字符串。這意味着單獨返回,不會減慢你的應用程序。我發現一個解釋得很好的article

如果函數可以避免構建這個大對象,它會變得更快。如果你改變外部函數的結果,或者在返回之前改變它,它會變得更慢(然後必須進行復制)。總是添加一小部分來構建一個長字符串非常昂貴,因爲每次都必須分配一個新的大塊內存。

也就是說,我們將不得不看你的代碼,以瞭解你描述的放緩。有時只返回一個結果是一個非常糟糕的建議,每個使用你的代碼的開發者都很難理解這種行爲。如果你經常使用它,你的應用程序遲早會變得不穩定。事實上,我發現它對return mixed typed values甚至是危險的,因爲PHP經常自己做。

相關問題