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