Re: [PHP-DEV] [RFC] Pipe Assignment Operator
[email protected] (Vadim Dvorovenko) Sun, 19 Jul 2026 13:04:57 +0700
| Newsgroups | php.internals |
|---|---|
| Message-ID | <[email protected]> |
Yes, I have carefully studied the RFCs and understand that they deal with completely different syntax and use cases. However, both proposals advocate for adding and using the `|>=` operator. Attempting to use it for both scenarios would result in a grammar conflict (the case `$x |>= $y` must be interpreted unambiguously). Therefore, it is appropriate to point out that this is not the only RFC proposing the `|>=` combination. 19.07.2026 11:54, Caleb White пишет: > On Saturday, July 19th, 2026 at 04:20, Vadim Dvorovenko <[email protected]> wrote: >> Firtly, i'd like to point out that you aren't the first person to come >> up with the idea of combining assignment and pipeline operators, and >> inroduce `|>=` operator >> >> Take a look at discussion, >> https://news-web.php.net/php.internals/128141 . RFC draft is here >> https://github.com/vadimonus/php-rfc/blob/main/ltr-assignment.md. >> >> I haven't submitted these drafts as an RFC yet because I haven't >> received enough positive feedback on the first RFC in the chain: >> https://wiki.php.net/rfc/pipe_to_return. You can see another drafts >> in github. > Hi Vadim, > > Thanks for the pointer, interesting to see that the idea of combining > assignment with the pipe operator has come up before. Great minds! > > I did take a look at your pipe-to-return RFC and the LTR assignment > draft. These are fundamentally different proposals from what this RFC > does, though. Your `|>=` reverses assignment direction entirely > (`expr |>= $var` means `$var = expr`), whereas mine is a compound > assignment in the traditional sense (`$var |>= callable` means > `$var = $var |> callable`), the same pattern as `+=`, `.=`, and `??=`. > >> The main idea, is that pipe operator reverses traditional funcation >> call reading order, so we need some more operators with same order to >> use together to reduce cognitive load. >> >> Your variant of this operator makes traditional rigth to left action, >> like other action. But `|>` arrow visually defines opposite direction. >> This may lead to incorrect perception, increase cognitive load and >> lead to mistakes. > The scope is quite different. Your drafts introduce an entirely > new assignment direction for PHP along with a full family of LTR > compound operators (`|> +=`, `|> -=`, `|> .=`, etc.). That's a > significantly larger surface area change. I'd gently push back > on the premise that `$result = expr |> f(...) |> g(...)` "reverses > traditional function call reading order". Pipes don't reverse reading > order, they fix it; nested calls read inside-out (`g(f(expr))`), and > pipes linearize that left-to-right. Assignment on the left is just > how every C-family language works; nobody reads `$result = 1 + 2` > and feels a directional conflict. Every language with pipes > (F#, Elixir, OCaml, Hack) keeps `var = expr |> ...` and none of > them have introduced LTR assignment to complement it. > > Even if those proposals were accepted, I think most PHP developers > would still reach for `$var = expr` out of habit and familiarity. > So `|>=` as a compound assignment operator would still have independent > value; it makes the very common `$x = transform($x)` pattern cleaner > regardless of whether LTR assignment exists. > >> I think, all extensions of pipe operator should be ducsussed together >> to intorduce non conflicting group of operators. Please add to your >> RFC links to other discussions and theese RFC drafts. > I don't think it makes sense to bundle these together or gate one on > the other. They solve different problems and can be evaluated on their > own merits. As for adding links to your drafts in my RFC, I'd prefer > to keep it focused on its own proposal. You're of course welcome to > cross-reference my RFC from your drafts if you'd like. > > Best, > Caleb > -- -- Vadim Dvorovenko