Re: [RFC] User-defined object comparison
| From: | Rudolf Theunissen | Date: | Fri, 29 Jun 2018 02:47:56 +0000 |
| Subject: | Re: [RFC] User-defined object comparison | ||
| References: | 1 2 3 4 5 6 7 8 9 10 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-102523@lists.php.net to get a copy of this message | ||
>
> In this case, the order of checking to see what method to call will also
> check
> for type compatibility. That is, $f < $b checks Foo::__compareTo(), finds
> it
> doesn't match, and so calls Bar::__compareTo() instead, which does.
I'm not sure if I like this, it's a bit non-deterministic isn't it.. that
the comparison function
called can be determined by the value being compared? While I'm not
disregarding this
idea entirely, it's another addition we can add at a later stage.
It would be a bit of a juggle internally, to hold on to the type error
while we attempt the
second call, and if that fails, we throw the type error of the first
attempt?
>
> "However, because magic methods aren't inherited" - Wait, they're not? Are
> you certain of that? Because 3v4l.org says they are:
> https://3v4l.org/P6Hlq
Yeah my bad, that was very poorly written, and I'll update it immediately.
What I meant
to say was that they aren't inherited from any base object class like
equals is in Java.
So if you just have a base class, magic methods aren't inherited from some
language-level
base class, so you can use whatever parameter and return types you like.
I don't understand Future Scope point 1. It... means we're already covering
> those operators. Why is there future scope needed?
Python, for example, has the ability to override specific comparison
operators, such as
> <chasepeeler@gmail.com>
>
__lt__ for <. Point 1 is trying to say that *if* we want to introduce full,
specific operator
overloading in the future, we would already have the magic methods for ==
and <=>.