On Wed, May 8, 2019 at 4:06 AM Nikita Popov <nikita....@gmail.com> wrote:

> On Tue, Jan 22, 2019 at 6:59 PM Levi Morrison <le...@php.net> wrote:
>
> > On Tue, Jan 15, 2019 at 1:27 PM Christoph M. Becker <cmbecke...@gmx.de>
> > wrote:
> > >
> > > On 04.01.2019 at 20:17, Levi Morrison wrote:
> > >
> > > > I intend to close the vote in a day or two, unless I hear of new>
> > issues from Dmitry or others.
> > > Any news here?
> > >
> > > --
> > > Christoph M. Becker
> >
> > I sent this a week ago to Christoph only; oops.
> >
> > I have not heard any news. The vote is now closed. The RFC passes 39
> > in favor to 1 against.
> >
> > Special thanks to Nikita and Dmitry who have helped find issues and
> > review the patch. It will not be merged until the implementation
> > quality is satisfactory.
> >
>
> As we're moving steadily towards 7.4 feature freeze, I'd like to discuss
> what we want to do with this RFC... The current implementation doesn't work
> correctly (I've done some more work in
> https://github.com/nikic/php-src/commits/variance-7.4, but it's also
> incomplete) and I have some doubts about how we're approaching this in
> general.
>
> This RFC really has two parts:
> 1. The actual variance change. This is a very straightforward change and
> there are no issues here.
> 2. The ability to check variance across multiple consecutive class
> definitions. This allows type declarations to reference classes that are
> declared later in the same file (but within one "block" of declarations).
>
> The second part is technically more dicey and somewhat arbitrary when seen
> in the wider scope of how class hoisting and early binding work in PHP:
> While PHP supports declaring classes "out of order" in some very simple
> cases like this...
>
> class B extends A {}
> class A {}
>
> ...it will not work for anything more involved than that, for example
>
> class C extends B {}
> class B extends A {}
> class A {}
>
> will already generate a "class not found" error.
>
> Now the variance RFC tackles one very specific part of this long-standing
> issue: The types referenced in parameter and return types may be declared
> later in the file (even if used variantly), but all other uses of the types
> still need to respect the declaration order.
>
> I think that we should be separating these two issues (variance and
> declaration order), and land the simple variance support in 7.4, while
> tackling the declaration order problem *in full* separately (in PHP 8,
> because I think we may want to make some BC breaking changes, in particular
> by making the class hoisting unconditional.)
>
> Thoughts on this approach?
>

As I read it, the RFC [1] aims to address the variance problem. The
declaration problem is related - but separate. Seems to me, solving the
variance problem is the primary concern. Since declarations are therefore a
secondary concern, I agree with the separation. (More the so because, IMO,
it's better to solve a problem holistically.)

[1]: https://wiki.php.net/rfc/covariant-returns-and-contravariant-parameters

Reply via email to