Re: [RFC][Discuss] Covariant return- and contravariant parameter- types

From: 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.

« previous php.internals (#103521) next »