On 2025-02-07 06:57, Larry Garfield wrote:
Hi folks. A few years ago I posted an RFC for a pipe operator, as seen
in
many other languages. At the time it didn't pass, in no small part
because the implementation was a bit shaky and it was right before
freeze.
Nonetheless, there are now even more (bad) user-space implementations
in
the wild, as it gets brought up frequently in "what do you want in
PHP?"
threads (though nowhere near generics or better async, of course), so
it
seems clear there is demand in the market for it.
It is now back with a better implementation (many thanks to Ilija for
his
help and guidance in that), and it's nowhere close to freeze, so here
we
go again:
https://wiki.php.net/rfc/pipe-operator-v3
Of particular note, since the last RFC I have concluded that a compose
operator is a necessary complement to a pipe operator. However, it's
also
going to be notably more work, and the two operators don't actually
interact at all at the code level, so since people keep saying "Small
RFCs!", here's a small RFC. :-)
Great feature! Three questions and a comment from me.
1. Do you think it would be hard to add some shorthand for `|>
$condition ? $callable : fn($😐) => $😐`?
2. Is compose in the scope or not? You mention it in both the main RFC
body and the future scope. Or are those different composes?
3. Does the implementation actually turn `1 |> f(...) |> g(...)` into
`$π = f(1); g($π)`? Is `g(f(1))` not performanter? Or is the engine
clever enough with the var reuse anyways?
I don't think Laravel's pipeline is relevant here. In it each callback
is responsible for invoking the rest of the chain. Thus it allows early
returns and interacting with the return value of the following chain
(`return 5 + $next($v)`). More like a middleware chaining tool, not a
pipe in the same meaning as in this RFC.
BR,
Juris