Type Hinting
PHP 5 introduces type hinting. Functions are now able to force parameters
to be objects (by specifying the name of the class in the function
prototype), interfaces, arrays (since PHP 5.1) or callable
(since PHP 5.4). However, if NULL is used
as the default parameter value, it will be allowed as an argument for any
later call.
If class or interface is specified as type hint then all its children or
implementations are allowed too.
Type hints can not be used with scalar types such as int or
string.
Resources and Traits are not allowed either.
Type Hinting examples
var;
}
/**
* Another test function
*
* First parameter must be an array
*/
public function test_array(array $input_array) {
print_r($input_array);
}
/**
* First parameter must be iterator
*/
public function test_interface(Traversable $iterator) {
echo get_class($iterator);
}
/**
* First parameter must be callable
*/
public function test_callable(callable $callback, $data) {
call_user_func($callback, $data);
}
}
// Another example class
class OtherClass {
public $var = 'Hello World';
}
?>
]]>
Failing to satisfy the type hint results in a catchable fatal error.
test('hello');
// Fatal Error: Argument 1 must be an instance of OtherClass
$foo = new stdClass;
$myclass->test($foo);
// Fatal Error: Argument 1 must not be null
$myclass->test(null);
// Works: Prints Hello World
$myclass->test($otherclass);
// Fatal Error: Argument 1 must be an array
$myclass->test_array('a string');
// Works: Prints the array
$myclass->test_array(array('a', 'b', 'c'));
// Works: Prints ArrayObject
$myclass->test_interface(new ArrayObject(array()));
// Works: Prints int(1)
$myclass->test_callable('var_dump', 1);
?>
]]>
Type hinting also works with functions:
var;
}
// Works
$myclass = new MyClass;
myFunction($myclass);
?>
]]>
Type hinting allowing NULL value:
]]>