Au cas où quelqu'un d'autre serait amené ici par Google parce qu'il essayait d'utiliser une variable pour une méthode dans une classe, voici un exemple de code qui fonctionnera réellement. Aucune des solutions ci-dessus n'a fonctionné dans mon cas. La différence essentielle est le &
dans la déclaration de $c = & new...
y &$c
qui passe dans call_user_func
.
Mon cas spécifique est l'implémentation du code de quelqu'un qui a à faire avec des couleurs et deux méthodes membres. lighten()
y darken()
de la classe csscolor.php. Pour une raison quelconque, je voulais que le même code soit capable d'appeler l'éclaircissement ou l'assombrissement plutôt que de le sélectionner avec de la logique. C'est peut-être le résultat de mon entêtement à ne pas utiliser simplement if-else ou à modifier le code qui appelle cette méthode.
$lightdark="lighten"; // or optionally can be darken
$color="fcc"; // a hex color
$percent=0.15;
include_once("csscolor.php");
$c = & new CSS_Color($color);
$rtn=call_user_func( array(&$c,$lightdark),$color,$percent);
Notez que si vous essayez quoi que ce soit avec $c->{...}
n'a pas fonctionné. En parcourant le contenu des contributions des lecteurs en bas de la page de php.net sur call_user_func
j'ai pu rassembler les éléments ci-dessus. Aussi, notez que $params
comme un tableau n'a pas fonctionné pour moi :
// This doesn't work:
$params=Array($color,$percent);
$rtn=call_user_func( array(&$c,$lightdark),$params);
La tentative ci-dessus donnerait un avertissement sur la méthode qui attend un deuxième argument (pourcentage).