Type hinting or type declarations are a defensive programming practice that ensures a function's parameters are of a specified type. This is particularly useful when type hinting for an interface because it allows the function to guarantee that a provided parameter will have the same methods as are required in the interface.
Passing the incorrect type to a type hinted function will lead to a fatal error:
Fatal error: Uncaught TypeError: Argument X passed to foo() must be of the type RequiredType, ProvidedType given