开发者

PHP nested conditional operator bug?

   
                return
                    true  ? 'a' :
                    false ? 'b' :
                                                           'c';

This should return 'a', but it doesn't. It returns 'b' instead. Is there a bug in PHP's order of handling the different parts of the conditional operators?

I got the idea from Are multiple conditional operators in this situation a good idea? where 开发者_如何学Cit does seem to work correctly.

(the true and false are for the purpose of the example, of course. in the real code they are statements that evaluate to true and false respectively. yes, i know that for sure)


It is recommended that you avoid "stacking" ternary expressions. PHP's behaviour when using more than one ternary operator within a single statement is non-obvious

From the PHP Manual under "Non-obvious Ternary Behaviour".

Ternary operators are evaluated left to right, so unless you add it the braces it doesn't behave as you expect. The following would work though,

return (true ? "a" : (false ? "b" : "c"));


Suspect it's evaluating (true ? 'a' : false) as the input to the second ternary operator and interpreting 'a' as true. Try bracketing appropriately.


order of operations:

>>> return true ? 'a' : false ? 'b': 'c';
'b'
>>> return true ? 'a' : (false ? 'b': 'c');
'a'


Let me explain in same way it was explained to me. But you have to pay attention in parenthesis to understand what is happening.

The PHP

The PHP code below

true ? "a" : false ? "b" : "c"

Is equivalent to:

(true ? "a" : false) ? "b" : "c"

Another languages

The code below

true ? "a" : false ? "b" : "c"

Is equivalent to:

true ? "a" : (false ? "b" : "c")
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜