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