PHP Version: 8.2.17
It works:
class Request {}
class FormRequest extends Request {}
function test(Request $request) {
print_r('buuu!' . get_class($request));
}
test(new FormRequest());
Result:
buuu!FormRequest
It does not work:
class Request {}
class FormRequest extends Request {}
class Animal {
public function test(Request $request) {}
}
class Giraffe extends Animal {
public function test(FormRequest $request) {
print_r('buuu!' . get_class($request));
}
}
(new Giraffe())->test(new FormRequest());
Result:
Fatal error: Declaration of Giraffe::test(FormRequest $request) must be compatible with Animal::test(Request $request) in /home/user/scripts/code.php on line 14
Now the question arises: WHAT IS THE DIFFERENCE BEYOND POO?