Re: [RFC Proposal] Allow methods to 'become' static
On Mon, Mar 15, 2021 at 2:16 PM Matthew Brown <matthewmatthew@gmail.com>
wrote:
> On Sun, 14 Mar 2021 at 18:09, Rowan Tommins <rowan.collins@gmail.com>
> wrote:
>
> > Are you saying that having the parent::getSomeInt() call fail would be
> > problematic?
> >
> >
> Yes, that's where this becomes unsound – you can call the child method
> statically, but the parent call assumes a dynamic instance.
>
> This is just my perspective (as someone building a tool that helps prevent
> people from shooting themselves in the foot), but PHP should not allow
> _more_ unsound behaviour than it already does.
>
I'm not sure I follow your point. The fact that something is compatible,
does not mean that you can just blindly perform a forwarding call. For
example, consider this:
class A {
public function method(string $x) {}
}
class B extends A {
public function method(string|int $x) {
parent::method($x);
}
}
B::method() is compatible with A::method() from a typesystem perspective.
But that doesn't mean that a parent::method() call will work. The above
code is simply an implementation bug in B::method(), but doesn't say
anything fundamental about the compatibility of the signatures. I would
argue that the same holds in your example.
Disclaimer: I have some serious doubts that allowing non-static->static
changes is worthwhile, I just don't see why it would be outright unsound.
Regards,
Nikita
Thread (8 messages)