2014-03-25 67 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; 
}