On Thu, Feb 5, 2015 at 2:08 AM, Andrea Faulds <a...@ajf.me> wrote: > Hi Hannes, > > > On 4 Feb 2015, at 23:58, Hannes Magnusson <hannes.magnus...@gmail.com> > 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