This RFC adds generic type syntax to PHP. Classes, interfaces, traits, functions, methods, closures, and arrow functions can declare type parameters; those parameters carry bounds, defaults, and variance markers; type arguments may be supplied at use sites and at call sites via turbofish.
final readonly class Pair<+L, +R> { public function __construct( public L $left, public R $right, ) {} public function swap(): Pair<R, L> { return new Pair($this->right, $this->left); } } final readonly class Box<+T> { public function __construct( public T $value, ) {} public function map<U>(callable $fn): Box<U> { return new Box(($fn)($this->value)); } public function zip<O>(O $value): Box<Pair<T, O>> { return new Box(new Pair($this->value, $value)); } } function identity<T>(T $value): T { return $value; } $greeting = new Box::<string>("hello, world"); $paired = $greeting->zip::<int>(42); $swapped = $paired->value->swap(); $result = identity::<Pair<int, string>>($swapped);
Yes! Time to retire the non-spec docblocks
I use them everywhere.
Generics are a necessary feature for all modern languages. It can reduce so much clutter and is desperately needed.
after so many years, the seems like the least obtrusive way to add generics. Really hope to see it get accepted so we don't have to keep waiting. Seems like a no-brainer tbh.
.
It's an opportunity to modernize PHP.
This feature of native generics syntax in PHP is all I ever dream of..
This is the best of all worlds. Other generic approaches have been tried and never got too far.
Bound-Erased Generics gives us a chance to get a first-party syntax that will make developers happy, allow tooling like IDEs and static analysers to pick up on it, while still leaving the implementation open for another kind of runtime/compile time generic implementation later down the line if the other possible issues with those are solved.
It's about time :)
doc blocks are ugly, needs more lines of code. this rfc is the way to go.
This might be the most important PHP RFC of this decade.
Maybe the only missing feature.
A new syntax for declaring the “set” operation visibility of an object property
The "pipe operator" |> allows you to chain multiple function calls in a more convenient way.