Moi a dit le 15 novembre 2008
Quel est l’intérêt ?
![]()
Vous êtes ici : Accueil / Articles / Formations en PHP
PHP est un sensible à la casse, c’est à dire qu’une méthode avec une majuscule sera différente d’une méthode avec une minuscule. Ainsi, le code suivant retournera une erreur :
class MaClasse {
public function maMethode() {
echo "Hello World";
}
}
$objet = new MaClasse();
// Code générant une erreur à cause de la majuscule
$objet->MaMethode();
?>
Pour obtenir notre résultat, nous allons avoir recours à une méthode magique et quelques fonctions que nous allons détailler :
La méthode __call()
Cette méthode est appelée lorsque nous faisons appel à une méthode qui n’existe pas. Elle prends le nom de la méthode appelée en paramètre, ainsi qu’un tableau des arguments.
La fonction get_class_methods()
Cette fonction retourne un tableau des méthodes de l’objet passé en paramètre ou du nom de la classe.
La fonction call_user_func_array()
Cette fonction très puissante permet d’exécuter une méthode ou une fonction de manière dynamique en lui passant en paramètre le nom de la fonction et un tableau de paramètres.
Il suffit de combiner les fonction introduites précédemment pour obtenir le résultat voulu :
class MaClasse {
public function maMethode() {
echo "Hello World";
}
public function __call( $nom, $arguments ) {
// Pour chaque méthode de la classe
foreach( get_class_methods( $this ) as $methode ) {
// Si la méthode est la même que celle appelée
if( strtolower( $methode ) == strtolower( $nom ) ) {
// Appeler la méthode dynamiquement
return call_user_func_array(
array( $this, $methode ),
$arguments );
}
}
// Par défaut, lancer une erreur
trigger_error( 'Méthode inconnue', E_USER_ERROR );
}
}
$objet = new MaClasse();
// Code ne générant pas d'erreur
$objet->MaMethode();
?>
Il est tout d’abord conseillé de créer une classe Caseless ne possédant que la méthode __call() et faire hériter toutes les classes de cette dernière.
Il est également possible d’imaginer une classe corrigeant les fautes de frappe grâce à la fonction levenshtein() qui retourne un entier représentant le nombre d’opérations à effectuer pour passer d’une chaîne à une autre.
Quel est l’intérêt ?
Aucun.
Saches que les méthodes ainsi que le nom des classes de PHP sont par défaut insensibles à la casse. C’était pour le plaisir d’écrire un article inutile. J’en ai tellement vu d’inutiles sur internet que j’avais envie d’en écrire un moi aussi.