Re: [RFC][Discuss] Covariant return- and contravariant parameter- types
| From: | Levi Morrison | Date: | Tue, 27 Nov 2018 21:00:27 +0000 |
| Subject: | Re: [RFC][Discuss] Covariant return- and contravariant parameter- types | ||
| References: | 1 2 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-103521@lists.php.net to get a copy of this message | ||
On Tue, Nov 27, 2018 at 11:36 AM Larry Garfield <larry@garfieldtech.com> wrote:
>
> On Monday, November 26, 2018 3:25:52 PM CST Levi Morrison wrote:
> > I am happy to announce my latest RFC, [Covariant Returns and
> > Contravariant Parameters][1], is open for discussion. If you do not
> > recognize those terms then hopefully the introduction coupled with the
> > [examples][2] will help. Here is one snippet that demonstrates
> > covariant return types:
> >
> > <?php
> > interface Repository {
> > function fetch(int $id): ?Entity;
> > }
> >
> > class UserFactory implements Repository {
> > function fetch(int $id): ?UserEntity {
> > /* Since UserEntity is an Entity, this is now allowed */
> > /* ... implementation ... */
> > }
> > }
> > ?>
> >
> > Covariant return types and contravariant parameter types are highly
> > requested features; here are a few of the bug reports:
> >
> > * https://bugs.php.net/bug.php?id=71825
> > * https://bugs.php.net/bug.php?id=72442
> > * https://bugs.php.net/bug.php?id=75385
> > * https://bugs.php.net/bug.php?id=75823
> >
> > There is a [preliminary implementation][3] that is available. It will
> > not be rebased during discussion to allow people to check out the code
> > and get updates without worrying about it breaking. The code quality
> > can definitely be improved, and there are still a few todo comments in
> > the code.
> >
> > Please do not discuss the items found in [Future Scope][4] as part of
> > this thread, which includes discussing types such as
> >
mixed,
> > scalar, numeric, etc.
> >
> > I look forward to your feedback, and especially with your
> > experimentation with the implementation.
> >
> > Levi Morrison
> >
> > [1]:
> > https://wiki.php.net/rfc/covariant-returns-and-contravariant-parameterss4'
> > K”|¥´Å÷PÍæ
> > [2]:
> >
> > https://wiki.php.net/rfc/covariant-returns-and-contravariant-parameters#exa
> > mples [3]:
> >
> > https://github.com/php/php-src/compare/master...morrisonlevi:variance2
> > [4]:
> >
> > https://wiki.php.net/rfc/covariant-returns-and-contravariant-parameters#fut×Ã'¢à
> > r/#Î!2¹x
> > ure_scope
>
> Looks like fun!
>
> Would this also include allowing a return type of static, which
> would be
> useful for the "Return the object that was invoked" case or "return a new
> instance of the same object" case? Currently we're limited to return
> self,
> which is, of course, not the same thing and less flexible.
>
> --Larry Garfield
It does not. To be honest, I did not think of it until your question.