2014-03-25 82 views
0
function foo() { 
    return $result = bar() ? $result : false; 
} 

function bar() { 
    return "some_value"; 
} 

foo(); 

注意:未定義的變量:導致與三元運算符的PHP錯誤?

這是一個錯誤?

bar()應該保存到$ result,但它不會。然而病情工作正常,它試圖返回$結果或虛假陳述(如果巴()爲null或false)

PHP 5.4.24

+0

這是爲什麼一個bug,它試圖讀取$結果,但它不是定義,因此在告訴你它的不確定。看起來像是由Design給我的。 –

+0

它從'bar()'中獲取值,所以返回'true' =>從而分配未定義的$ result。那有什麼問題? – Rikesh

+0

明顯的PICNIC在這裏.. :) –

回答

11

這是因爲operators precedence。是否

function foo() { 
    return ($result = bar()) ? $result : false; 
} 

-so賦值將以更高的優先級進行評估。

+0

這是真棒。 +1 –

+0

太棒了!是的..沒有括號它返回$結果作爲後續條件的評估。謝謝! –

0

我們不能做的只是:

function foo() { 
    return bar() ? $result : false; 
} 

function bar() { 
    return "some_value"; 
} 

foo(); 
+0

..你會得到未定義的'$ result'變量(因爲你會嘗試返回它) –

1

更優雅的解決方案:

function foo() { 
    return bar() ?: false; 
}