Klassen und Objekte
PHP Manual

Type Hinting

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), Interfaces, Arrays (seit PHP 5.1) oder callable zu sein. Wird dabei NULL als Vorgabewert für einen Parameter angegeben so ist dies ein weiterer gültiger Aufrufwert neben dem spezifizierten Typ.

Wenn eine Klasse oder ein Interface als Type Hint angegeben wird, dann sind alle ihre Kinder bzw. seine Implementierungen ebenfalls erlaubt.

Type Hints können nicht mit skalaren Typen wie int oder string verwendet werden. Ressourcen und Traits sind ebenfalls nicht erlaubt.

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);
    }

    
/**
     * Der erste Parameter muss ein Iterator sein
     */
    
public function test_interface(Traversable $iterator) {
        echo 
get_class($iterator);
    }

    
/**
     * Der erste Parameter muss ein callable sein
     */
    
public function test_callable(callable $callback$data) {
        
call_user_func($callback$data);
    }
}

// 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);

// Funktioniert: 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'));

// Funktioniert: Gibt das ArrayObject aus
$myclass->test_interface(new ArrayObject(array()));

// Funktioniert: Gibt int(1) aus
$myclass->test_callable('var_dump'1);
?>

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);

?>

Klassen und Objekte
PHP Manual