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?

Nikita

Reply via email to