lundi 26 janvier 2009
PHP possède un moyen assez simple pour créer des fonctions anonymes (une fonction qui ne possède pas de nom). Pour y arriver, on doit appeler la fonction create_function et fournir deux arguments de type "string", le premier correspondant à la liste des arguments de la fonction (ses paramètres), le deuxième étant le code PHP de la fonction qui sera évalué à l'interne pour être interprété en code PHP :
$args = '$amount, $pcnt_tps, $pcnt_tvq';Ça fonctionne, mais avouez que ça ne produit pas un code très élégant et que c'est plus difficile à lire, surtout quand on est habitué à écrire des fonctions anonymes selon le modèle de JavaScript. En fouillant un peu, je suis tombé sur un article qui décrivait comment effectuer une patch à la source C de l'engin PHP pour pouvoir l'écrire avec une meilleure syntaxe. Et la bonne nouvelle est qu'à partir de PHP 5.3 (encore en release candidate alpha), on pourra vraiment faire comme ceci :
$code = '
$tps = $amount * ($pcnt_tps / 100);
$tvq = ($amount + $tps) * ($pcnt_tvq / 100);
return $amount + $tps + $tvq;';
// création de la fonction anonyme
$addQuebecTaxes = create_function($args, $code);
// appel de la fonction anonyme contenue dans la variable
// 100$ + les taxes TVQ et TPS = 112.88$
echo $addQuebecTaxes(100, 5, 7.5);
$addQuebecTaxes = function ($amount, $pcnt_tps, $pcnt_tvq) {Pour les lecteurs qui viennent de l'extérieur du Québec, l'exemple du code ci-dessus calcule les taxes de la belle province sur un montant donné. Ce n'est pas une erreur si la taxe de vente du Québec est calculée par dessus la taxe sur les produits et services (TPS). Nous sommes malheureusement un des rares endroits dans le monde où la taxe est taxable!
$tps = $amount * ($pcnt_tps / 100);
$tvq = ($amount + $tps) * ($pcnt_tvq / 100);
return $amount + $tps + $tvq;
};