What's undefined isn't the relationship between preinc/postinc and add.
What's undefined is the use of multiple preinc/postinc operators within a
single expression (preincrements in particular). Our parser grammer, as it
currently stands, does have a predictable order, but that is a side-effect
of implementation. The language's definition of order of resolution of
multiple preinc/postinc elements within a single ticked statement is that
they are undefined. And *that* is what made your *particular* change to
the documentation incorrect.
If you'd like to define behavior for: echo ++$a + 1; then that's a
different matter. Defining the behavior of ++$a + $a++, however is
inviting misunderstanding*.
What was inappropriate, was asking for comment, receiving comment which
cited an issue, then committing without discussing that issue first.
-Sara
* Even if, technically, either order of evaluation will result in the same
answer for this contrived expression. ++$a * $a++ is a more obviously
ambiguous answer for a language which explicitly does not define an order
of resolution.
On Fri, Jul 19, 2013 at 9:28 PM, Yasuo Ohgaki <[email protected]> wrote:
> Hi Sara,
>
> 2013/7/20 Sara Golemon <[email protected]>
>
>> On Fri, Jul 19, 2013 at 7:16 PM, Yasuo Ohgaki <[email protected]> wrote:
>>
>>>
>>>
>>> If there aren't comments, I'll rewrite the example.
>>>
>>>
>>> There were comments. I explicitly told you that that the behavior is
>> defined as undefined. You CHOSE to ignore that comment. You CHOSE to
>> break the documentation.
>>
>
> If there is defined precedence, arithmetic operation should follow it.
> If there is exception, it should be documented.
>
> I don't understand why/how the arithmetic operation can be
> ambiguous with defined precedence. (++ and -- are higher than +)
>
> $a = 1;
> echo ++$a + $a++;
>
> should always print 4 with current PHP precedence definition.
> If it does not, it's a bug in language.
>
> // mixing ++ and + produces undefined behavior
> $a = 1;
> echo ++$a + $a++; // may print 4 or 5
>
> I don't see any reason it became undefined.
> If this kind of simple precedence is broken, how programmers write
> code and/or trust the language?
>
> http://3v4l.org/mR4da/vld#tabs
>
> This site seems support PHP 4.3.0 to PHP 5.5.0 and opcode looks
> fine. Am I missing something?
>
> If you would like to suggest use of (), it should be done differently.
> IMHO.
> The comment only ruins PHP's reputation as language.
>
> Regards,
>
> --
> Yasuo Ohgaki
> [email protected]
>