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



