Re: [PHP-DEV] [RFC] Pipe Assignment Operator

[email protected] (Tim Düsterhus) Mon, 13 Jul 2026 19:23:35 +0200
Newsgroups php.internals
Message-ID <[email protected]>
Hi

On 2026-07-10 06:45, Caleb White wrote:
> I'd like to open discussion on my (first!) RFC for the pipe assignment 
> operator (|>=):
> https://wiki.php.net/rfc/pipe_assignment_operator

I've given the RFC a read now and have the following comments:

1.

Conceptionally I like the idea of having an “in-place modification 
operator” for function calls and the semantics of the operator seem to 
be consistent with the existing “modify-assign” operators we have, 
particularly also with regard to operand order. Nice idea!

2.

I appreciate how detailed the RFC describes that the feature will just 
“work as expected” (e.g. with regard to variables targets or callable 
styles), this is good to avoid any ambiguity.

3.

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.

4.

For the examples, I'd like to note that some of the “before” examples 
are needlessly complex and might not fairly represent the old code. 
Specifically:

     $input = $input |> trim(...) |> strtolower(...);
     $this->currentOrder->lineItems = $this->currentOrder->lineItems
         |> array_unique(...)
         |> array_values(...)
         |> array_reverse(...);

could already be:

     $input = trim($input) |> strtolower(...);
     $this->currentOrder->lineItems = 
array_unique($this->currentOrder->lineItems)
         |> array_values(...)
         |> array_reverse(...);

Best regards
Tim Düsterhus