Re: Allow dropping typehints during inheritance

From: Date: Thu, 05 Feb 2015 12:14:16 +0000
Subject: Re: Allow dropping typehints during inheritance
References: 1 2 3 4  Groups: php.internals 
Request: Send a blank email to [email protected] to get a copy of this message
On 05/02/15 13:10, Julien Pauli wrote:
> On Thu, Feb 5, 2015 at 2:08 AM, Andrea Faulds <[email protected]> wrote:
> 
>> Hi Hannes,
>>
>>> On 4 Feb 2015, at 23:58, Hannes Magnusson <[email protected]>
>> wrote:
>>>
>>> So what it supports "more inputs"?
>>> It does constitute an LSP violation. "more inputs" is not what the
>>> guarantee is at all, if that is what you want you'd typehint on a
>>> interface.
>>>
>>>
>>> It is a LSP failure to allow a string, or any other scalar value, when
>>> the parent requires a specific type/object.
>>>
>>> It sucks that we fail our arginfo very frequently, but this is the way
>> it is :]
>>
>> An interface requires only a minimum standard for accepted input. If a
>> class implementing that interface allows a wider range of values, but still
>> allows at least what the interface requires it to, it is not an LSP
>> violation. Scalars are not special.
>>
> 
> If we allow larger type, why doesn't such code work ?
> 
> interface A { }
> interface B extends A { }
> 
> class C {
>     public function foo(A $a) { }
> }
> 
> class D extends C {
>     public function foo(B $a) { } // E_STRICT
> }
> 
> This is wrong IMO.
> 

This is not "larger" but *more* specific.


-- 
Regards,
Mike


Thread (24 messages)

« previous php.internals (#81907) next »