8796 sujets

Développement web côté serveur, CMS

Bonjour à vous !

Tout est dans le titre Smiley smile Je me demande la raison d'être de call_user_func alors que l'on peut appeler directement une fonction. Si call_user_func existe il doit bien y avoir une raison...

Au passage, il y a même une troisième manière de faire avec eval("mafonction();");

Merci pour vos lumières.
Modifié par Bob33 (03 Aug 2009 - 12:54)
Salut,

Bob33 a écrit :
Si call_user_func existe il doit bien y avoir une raison...
C'est clair ! Smiley lol

call_user_func permet d'appeler une fonction qui est définie par une variable. Un petit exemple (qui n'a ici d'intérêt que de voir le fonctionnement) :
<?php
$mavaleur = 0;
echo '<p>ma valeur vaut au début du traitement : '.$mavaleur."</p>\n";

function ajouter($val) {
	global $mavaleur;
	echo '<p>Addition de '.$val."</p>\n";
	$mavaleur += $val;
}
function soustraire($val) {
	global $mavaleur;
	echo '<p>Soustraction de '.$val."</p>\n";
	$mavaleur += $val;
}

for($i = 0; $i < 10; $i++) {
	$valeur = mt_rand(-10, 10);
	$fonction = $valeur < 0 ? 'soustraire' : 'ajouter';
	call_user_func($fonction, $valeur);
}

echo '<p>ma valeur vaut maintenant : '.$mavaleur."</p>\n";
?>
Je te concède que dans cet exemple ça n'a pas grand intérêt mais le mieux est de lire la doc sur les fonctions et de jeter un oeil aux exemples en bas de pages.
@Heyoan (ou qqu'un d'autre Smiley smile ) : Ces types de fonctions sont-elles généralement utiliser lors des tests d'applications ?
Personnellement je ne m'en sers jamais mais il me semble que l'intérêt principal est plutôt de factoriser son code (plus particulièrement si on utilise les classes).
Effectivement, en appelant une fonction grâce à une variable, call_user_func prend tout son sens. Je n'ai en effet pas trouvé d'autre moyen de le faire, avec eval par exemple.

Merci Heyoan.
Au passage, en éditant mon premier message pour passer le titre du post en résolu ca ne fonctionne pas Smiley decu