On 12.12.2018 at 17:28, Levi Morrison wrote:

> On Wed, Dec 12, 2018 at 4:25 AM Christoph M. Becker <cmbecke...@gmx.de> wrote:
>>
>> On 11.12.2018 at 21:34, Levi Morrison wrote:
>>
>>> On Mon, Nov 26, 2018 at 2:25 PM Levi Morrison <le...@php.net> wrote:
>>>
>>>> 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. […]
>>>>
>>>>   [1]: 
>>>> https://wiki.php.net/rfc/covariant-returns-and-contravariant-parameters
>>>>   [2]: 
>>>> https://wiki.php.net/rfc/covariant-returns-and-contravariant-parameters#examples
>>>
>>> It has been two weeks now. If you want to provide any feedback, or
>>> follow-up on anything from the discussion, please do so soon. I hope
>>> to put this to vote before the end of the year.
>>
>> Thanks for working on this, Levi.  Highly appreciated!
>>
>> I may have missed this, but otherwise I'd be quite surprised that nobody
>> had commented on:
>>
>> | Therefore, by-reference parameters are still contravariant, […]
>>
>> Call-by-reference is not seldom used to provide out-parameters, but
>> these should not be contravariant according to LSP.  Therefore, it might
>> be best to keep by-reference parameters invariant.
> 
> Christoph, we cannot make any guarantees about the type of the
> variable when the function returns because the type of the parameter
> is only checked on function entry, and not also on function exit, e.g.
> 
>     function array_baz(array &$in) {
>       $in = 1;
>     }
>     $array = [];
>     array_baz($array); // valid
>     var_export($array); // 1
> 
> I do think we ought to have "out" parameters some day which would
> prevent this behavior (as well as have some other benefits), but that
> is out of scope for this RFC. The RFC notes that if we had "inout"
> parameters that they would need to be invariant. It also says that
> "out" parameters would be invariant, but they may be covariant
> depending on the exact semantics specified -- all that can be handled
> in the RFC that proposes it.

I was not aware of this – thanks for the explanation.  In my opinion,
yet another good reason to avoid references.

> I will add this example (or maybe a better one) to the RFC. Thanks for
> bringing it up.

Thanks.  Also documented now:
<http://svn.php.net/viewvc?view=revision&revision=346309>.

-- 
Christoph M. Becker

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

Reply via email to