在一些語言中,你可以做PHP中是否存在返回最左邊值的短路?
$a = $b OR $c OR die("no value");
也就是說,由左到右,直到它找到一個真值或將短路,只有評估值。但是,除此之外,它返回的已評估的實際值,而不僅僅是true
。
在上述例子中,在PHP,$a
將是價值1
如果任$a
或$b
是非假值,否則會die
。
所以寫了一個函數first
,以用作
$a = first($a, $b, die("no value"));
它返回值要麼$a
或$b
的。但是,它不會短路 - 它始終是die
。
PHP中是否存在短路OR
返回實際值?
編輯: 一些很好的答案,因爲我給的例子,但我想我的例子不正是我的意思。讓我澄清一下。
$a = func1() OR func2() OR func3();
各地方對這些功能做了真的很激烈計算的,所以我只想最多一次評估每一個表情。首先要返回一個真實值,我想將實際值存儲在$a
中。
我想我們可以排除寫一個函數,因爲它不會短路。而條件運算符的答案會評估每個表達式兩次。
這當然總是會死的。當你調用一個函數時,PHP必須首先評估所有的參數。在評估過程中,它看到'死亡'(「沒有價值」),就是這樣。 – Tom 2009-10-08 17:16:40
當我們談論變量時,評估每個表達式兩次都很好。你必須在第一時間提出你的問題,而不是在提出第一次不可用的額外信息後批評答案。如果你的意思是功能,第一次使用功能。最好的答案是現在混亂的「號碼」 – 2009-10-08 17:54:37
評論#2是錯誤的。 php有短路評估,但AFAIK不會返回最左邊的值。它總是返回一個布爾值。 – apinstein 2012-01-02 14:04:16