Thank you for the question;
This is a bit confusing in PHP. The override must have a weaker type hint than the parent function, not the other way around.
Sample:
class A {
function foo(A $a){}
}
class B extends A {
function foo(B $a){} // PHP reports fatal error here
}
// The following demonstrates why it's not allowed:
function test(A $a) {
$a->foo( new B ); // A::foo() does not accept B, although B::foo() does // contradiction
}
test( new B );