From the docs page http://php.net/manual/en/language.oop5.typehinting.php
If class or interface is specified as type hint then all its children or implementations are allowed too.
But:
class PimpleChild extends Pimple {
//...
}
interface Pimple_Config {
public function configure(Pimple $container);
}
class PimpleConfigurer_Factories implements Pimple_Config {
public function configure(PimpleChild $container) {
//...
}
}
returns fatal error. Why?
If I am not mistaken you get this error:
Which means: If you define a method in a super class or in an interface, all sub classes (or classes implementing the interface) must use exactly this definition. You cannot use another type here.
As for your quote from the documentation:
This only means that you can pass a variable which is of a certain type or all its children.
For example: Say you have the following classes:
And a function (or method, no difference there) with type hint:
You can now pass all objects of type Car and all its sub classes (here SuperCar) to this function, like:
From the same typehinting section you linked to:
For the method signatures to be the same, they must contain the exact same typehints. And also relevant because it is similar...
From the OOP Basics -
extends
section of the manual: