On Sat, Nov 12, 2016 at 9:47 AM Christoph M. Becker <cmbecke...@gmx.de> wrote:
> On 12.11.2016 at 17:21, David Walker wrote: > > > Should > > $a = 1; > > var_dump(1 < $a++ < 3); > > > > (expanded into numbers) be evaluated as: > > 1 < 2 && 2 < 3 - True > > or > > 1 < 2 && 3 < 3 - False > > In my opinion, that should evaluate to > > 1 < 1 // false > > because we have a post-increment operator, and it seems to me that the > expansion defined for Python[1] makes most sense: > Double my oops, I meant a pre-increment. > > > Comparisons can be chained arbitrarily, e.g., x < y <= z is > > equivalent to x < y and y <= z, except that y is evaluated only once > > (but in both cases z is not evaluated at all when x < y is found to > > be false). > > [1] <https://docs.python.org/2/reference/expressions.html#not-in> > I concur with this, that each term should only be evaluated once, in more what Lauri defined: a < ($tmp1 = b) && $tmp1 < ($tmp2 = c) && $tmp2 < d Which would ensure that each position is evaluated once, in a left->right fashion. And I doubly concur that evaluation is short circuited (per my wrong example, you corrected): $a = 0 1 < $a++ < $a++ < 3 ~~ 1 < 1 // false. $a would be 1 after this line. -- Dave