Re: [PHP-DEV] [RFC] Pipe Assignment Operator
[email protected] (Tim Düsterhus) Tue, 14 Jul 2026 10:22:04 +0200
| Newsgroups | php.internals |
|---|---|
| Message-ID | <[email protected]> |
Hi On 2026-07-13 21:02, Caleb White wrote: >> The only thing I'm missing for the semantics is an explicit >> explanation >> of the operator precedence and associativity (it has the same >> precedence >> and associativity as any other assignment operator; but this needs to >> be >> in the RFC). And please also include explicit examples along the lines >> of: >> >> If you write `$foo |>= bar(...) |> baz(...)` it will be interpreted as >> if you have written `$foo = (($foo |> bar(...)) |> baz(...))` with the >> very explicit redundant parentheses. >> >> Please also include some additional more complex examples, e.g. `$foo >> |>= $bar |>= …`, `$foo += $bar |>= …` and similar to make sure there >> is >> no ambiguity for possible use cases that users might have. > > I've added a section in the RFC for this and included more complex > examples. Thank you. One note regarding “the lowest precedence level, right-associative”. This is not quite correct. While the assignment operators have fairly low precedence, they are not the lowest. As an example, the infamous `$foo = bar() or die()` pattern relies on `or` having a lower precedence than assignment. This should be corrected. The `$result = ($x |>= double(...)) |> triple(...);` example also doesn't showcase precedence, because of the explicit parentheses. ------ Looking at the RFC examples again, I was reminded of this RFC: https://wiki.php.net/rfc/implicit_move_optimisation, which concerns itself with optimizing the `$foo = func($foo);` case. Perhaps it makes sense to list this in the references section, because with `|>=` this “in-place” reassignment would become an official pattern. Best regards Tim Düsterhus