On Wed, May 8, 2019 at 2: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?
>
> Nikita

I fully support this approach. I will prepare a patch for simple
variance in PHP 7.4. I intend to leave the existing test cases that
will fail without supporting consecutive declarations, but marked as
expected failures.

I think in PHP 8 we can already benefit from the [always generate
fatal error for incompatible method signatures RFC][1]. We might also
be able to make some improvements with compile-time errors on invalid
"parent::" usage (previously done for PHP 7.4 but [backed out][2]),
which might make things a bit more straightforward (it might not --
turns out parent is not exactly what I thought it was).

  [1]: https://wiki.php.net/rfc/lsp_errors
  [2]: 
https://github.com/php/php-src/commit/deb44d405eb27a6654ad9a57c1e5f641218b22a4

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

Reply via email to