On Mon, Mar 10, 2025, at 20:05, Daniel Scherzer wrote:
> Hi internals,
>
> I'd like to start discussion on a new RFC about allowing `never` for
> parameter types when declaring a method.
>
> * RFC: https://wiki.php.net/rfc/never-parameters-v2
> * Implementation: https://github.com/php/php-src/pull/18016
>
> -Daniel
Hey Daniel,
This looks interesting. I'm not sure that I like "never" as a parameter type
and while it "technically" doesn't violate LSP, it seems like a backdoor to
doing just that:
abstract class Point {
function add(never $other);
function subtract(never $other);
}
class Vector2 extends Point {
public function add(Banana $other) {}
public function subtract(Football $other) {}
}
There's basically only a gentleman's agreement that a subclass will implement
things in a way that makes sense. I would also personally prefer associated
types:
abstract class Point {
public type OtherPoint;
public function add(OtherPoint $other);
pubic function subtract(OtherPoint $other);
}
This at least lets you ensure the "other point" is the same type in both
functions, though personally, I'd rather just have generics.
— Rob