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

From: Date: Mon, 03 Dec 2018 16:44:58 +0000
Subject: Re: [RFC][Discuss] Covariant return- and contravariant parameter- types
References: 1  Groups: php.internals 
Request: Send a blank email to internals+get-103547@lists.php.net to get a copy of this message
On Mon, Nov 26, 2018 at 2:25 PM Levi Morrison <levim@php.net> 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-parameters > [2]: > https://wiki.php.net/rfc/covariant-returns-and-contravariant-parameters#examples > [3]: > https://github.com/php/php-src/compare/master...morrisonlevi:variance2 > [4]: > https://wiki.php.net/rfc/covariant-returns-and-contravariant-parameters#future_scope Our existing engine doesn't always resolve "parent" at compile time when possible. As part of this patch "parent" is resolved at compile-time when possible and warnings and/or errors are emitted in certain cases where there were none before. For instance, this would only cause an error only if the method C::m were to be used: <?php class C { static function m(parent $m) {} } ?> This now emits an E_DEPRECATED warning when C is compiled. In 8.0 this should be elevated to a COMPILE_ERROR. The current edition of the RFC fails to mention this.

« previous php.internals (#103547) next »