<?php
interface OriginalContract
{
}
interface MoreSpecificContract extends OriginalContract
{
}
class Foo
{
public function baz(OriginalContract $item) {}
}
class Bar extends Foo
{
public function baz(MoreSpecificContract $item) {}
}
/*
I actually want Bar to accept only instances of MoreSpecificContract
But for polymorphism, since it extends OriginalContract, it should be valid imho
The only way I can now do this is
class Bar extends Foo
{
public function baz(OriginalContract $item)
{
if (($item instanceof MoreSpecificContract) === false) {
throw new Exception("Expected something more specific");
}
// do some more specific stuff
}
}
*/
Fatal error: Declaration of Bar::baz(MoreSpecificContract $item) must be compatible with Foo::baz(OriginalContract $item) in /in/9aXie on line 18
Process exited with code 255.
Output for 7.4.0 - 7.4.33
Warning: Declaration of Bar::baz(MoreSpecificContract $item) should be compatible with Foo::baz(OriginalContract $item) in /in/9aXie on line 18