PHP 5 führt Type Hinting ein. Funktionen sind damit fähig, Parameter zu zwingen, Objekte (indem man den Namen der Klasse im Funktionsprototyp spezifiziert) oder Arrays (seit PHP 5.1) zu sein. Wird dabei NULL als Vorgabewert für einen Parameter angegeben so ist dies ein weiterer gültiger Aufrufwert neben dem spezifizierten Typ.
Beispiel #1 Type Hinting Beispiele
<?php
// Eine Beispielklasse
class MyClass
{
/**
* Eine Testfunktion
*
* Der erste Parameter muss ein Objekt des Typs OtherClass sein
*/
public function test(OtherClass $otherclass) {
echo $otherclass->var;
}
/**
* Eine weitere Testfunktion
*
* Der erste Parameter muss ein Array sein
*/
public function test_array(array $input_array) {
print_r($input_array);
}
}
// Eine weitere Beispielklasse
class OtherClass {
public $var = 'Hallo Welt';
}
?>
Wird der Type Hint nicht erfüllt, führt dies zu einem abfangbaren fatalen Fehler.
<?php
// Eine Instanz jeder Klasse
$myclass = new MyClass;
$otherclass = new OtherClass;
// Fatal Error: Argument 1 must be an object of class OtherClass
$myclass->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);
// Funktionier: Gibt Hallo Welt aus
$myclass->test($otherclass);
// Fatal Error: Argument 1 must be an array
$myclass->test_array('a string');
// Funktioniert: Gibt das Array aus
$myclass->test_array(array('a', 'b', 'c'));
?>
Type Hinting funktioniert ebenfalls mit Methoden
<?php
// Eine Beispielklasse
class MyClass {
public $var = 'Hallo Welt';
}
/**
* Eine Testfunktion
*
* Der erste Parameter muss ein Objekt vom Typ MyClass sein
*/
function MyFunction (MyClass $foo) {
echo $foo->var;
}
// Funktioniert
$myclass = new MyClass;
MyFunction($myclass);
?>
Type hinting mit möglichen NULL Werten:
<?php
/* Akzeptiert NULL Werte */
function test(stdClass $obj = NULL) {
}
test(NULL);
test(new stdClass);
?>
Type Hints können nur vom Typen object und (seit PHP 5.1) array sein. Traditionelles Type Hinting mit int und string wird nicht unterstützt.