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.
Julien.P