Typage objet

PHP 5 introduit le typage objet implicite (litt�ralement, Type Hinting). Les fonctions peuvent maintenant imposer aux param�tres d'�tre des objets (en sp�cifiant le nom de la classe dans le prototype de la fonction) ou des tableaux (depuis PHP 5.1). Cependant, si NULL est utilis� en tant que valeur par d�faut du param�tre, il sera autoris� comme argument pour tous les futurs appels.

Exemple #1 Exemples de typage d'objets

<?php
// Un exemple de classe
class MaClasse
{
    
/**
     * Fonction de test
     *
     * Le premier param�tre doit �tre un objet de type AutreClasse
     */
    
public function test(AutreClasse $autreclasse) {
        echo 
$autreclasse->var;
    }


    
/**
    * Une autre fonction de test
    *
    * Le premier param�tre doit �tre un tableau
    */
    
public function test_array(array $input_array) {
        
print_r($input_array);
    }
}

// Un autre exemple de classe
class AutreClasse {
    public 
$var 'Bonjour le monde!';
}
?>

Si le param�tre ne satisfait pas les conditions impos�es, une erreur fatale (qui peut �tre attrap�e) est �mise.

<?php
// Une instance de chaque classe
$maclasse = new MaClasse;
$autreclasse = new AutreClasse;

// Erreur fatale : Argument 1 doit �tre un objet de la classe AutreClasse
$maclasse->test('salut');

// Erreur fatale : Argument 1 doit �tre une instance de AutreClasse
$foo = new stdClass;
$maclasse->test($foo);

// Erreur fatale : Argument 1 ne doit pas �tre null
$maclasse->test(null);

// Fonctionne : Affiche 'Bonjour le monde!'
$maclasse->test($autreclasse);

// Erreur fatale : Argument 1 doit �tre un tableau
$myclass->test_array('a string');

// Fonctionne : Affiche le tableau
$myclass->test_array(array('a''b''c'));
?>

Le typage fonctionne aussi avec les fonctions :

<?php
// Un exemple de classe
class MaClasse {
    public 
$var 'Bonjour le monde!';
}

/**
 * Fonction de test
 *
 * Le premier param�tre doit �tre un objet de type MaClasse
 */
function MaFonction(MaClasse $foo) {
    echo 
$foo->var;
}

// Fonctionne
$maclasse = new MaClasse;
MaFonction($maclasse);
?>

Le typage objet autorise les valeurs NULL :

<?php

/* On accepte la valeur NULL */
function test(stdClass $obj NULL) {

}

test(NULL);
test(new stdClass);

?>

Le typage de param�tre ne fonctionne qu'avec les variables de type object et array. Le typage avec les types traditionnels, tels que int et string, n'est pas support�.