2012-06-10 127 views
3

我有一個關於PHP的return語句的簡短問題。在C++中,我們能夠執行以下操作:是否有可能在PHP返回語句中執行賦值?

... function body ... 
return (foo = bar, biz()); 

其中變量barbiz()結果之前分配給foo返回。

這是可能的(或類似的)在PHP中? PHP中的上述語句導致解析錯誤。現在,我知道我可以在返回語句之前簡單地執行任務,但這僅僅是一個人爲的例子,我很好奇可行性。

編輯:提供一點澄清。以下是我基本上試圖在PHP做:

return ($foo = $bar, biz()) 
    || ($foo = $bar, baz()) 
    || ($foo = $bar, qux()); 

foo是在biz修改全局引用。如果biz返回false,則會測試OR語句中的下一個段。因爲biz返回false,所以在執行baz等之前,我需要「重置」foo的值,等等。

我知道我在這裏要做的是不純,但我只是好奇是一個相當於(或至少類似的東西)是可能的在PHP中。

+0

你的意思是像'$回報吧=蘭特(1,9);'? –

+0

爲什麼在一個函數中賦值局部值對不同函數的結果有影響?除非你使用某種形式的全局狀態,這將是愚蠢的。 –

+0

@tereško - 是的,在這個例子中,foo被引用爲全局狀態。我知道這通常構成一個反模式,但假設某些東西是愚蠢的而沒有完整的知識可能有點短視。 – naivedeveloper

回答

3

不,不幸的是,PHP實際上並沒有逗號運算符,除了for循環的expr1。在其他地方,逗號僅用於將參數分隔到函數或語言結構中。

您可以對您自己的逗號運算符用戶函數進行排序,該函數僅返回傳遞給它的最後一個參數。這裏是我的鏡頭吧:

function comma(){ return func_get_arg(func_num_args() - 1); } 

有了這個,你可以使用:

return comma($foo = $bar, biz()); 

下面的完整代碼輸出Hello

<?php 

function foo(){ 
    $bar = 'Hello'; 
    return comma($foo = $bar, bar($foo)); 
} 

function bar($foo){ 
    echo $foo; 
} 

foo(); 

function comma(){ return func_get_arg(func_num_args() - 1); } 

編輯

你的示例代碼,使用逗號函數將如下所示:

return comma($foo = $bar, biz()) 
    || comma($foo = $bar, baz()) 
    || comma($foo = $bar, qux()); 

我誠實地不能推薦使用這個。這就是爲什麼我的簡短答案是「不」。

+0

正是我在想什麼。感謝您的洞察力。我想驗證是否沒有等效的語言功能。 – naivedeveloper

+0

@naivedeveloper不客氣!這是一個很好的問題,我也從中學到了一些東西。當你問到這個問題時,我認爲確實有一個逗號運算符,但經過一些更多的研究後,我意識到了其他問題。感謝:) – Paulpro

0

你可以返回他們在一個數組

return Array($foo = "bar", biz()); 

數組將包含:

Array ([0] => bar [1] => A) 
+0

編輯後,我明白你的意思,我很確定這不可能在PHP中。 –

+0

道歉原來沒有充分解釋。謝謝你的幫助。 – naivedeveloper