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�.