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

-- 
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to