Mise à jour : L'approche présentée ici a un inconvénient majeur : la nouvelle fonction n'est pas un membre entièrement qualifié de la classe ; $this
n'est pas présent dans la méthode lorsqu'elle est appelée de cette manière. Cela signifie que vous devriez passer l'objet à la fonction en tant que paramètre si vous souhaitez travailler avec des données ou des fonctions de l'instance de l'objet ! De plus, vous ne pourrez pas accéder aux membres private
ou protected
de la classe à partir de ces fonctions.
Bonne question et idée astucieuse d'utiliser les nouvelles fonctions anonymes !
De manière intéressante, cela fonctionne : Remplacez
$me->doSomething(); // Ne fonctionne pas
par call_user_func sur la fonction elle-même :
call_user_func($me->doSomething); // Fonctionne !
ce qui ne fonctionne pas est la façon "correcte" :
call_user_func(array($me, "doSomething")); // Ne fonctionne pas
si appelé de cette manière, PHP exige que la méthode soit déclarée dans la définition de la classe.
S'agit-il d'une question de visibilité private
/ public
/ protected
?
Mise à jour : Non. Il est impossible d'appeler la fonction de la manière habituelle même depuis l'intérieur de la classe, donc ce n'est pas une question de visibilité. Passer la fonction réelle à call_user_func()
est la seule façon que je trouve pour que cela fonctionne.
0 votes
Est-ce spécifiquement sans utiliser une classe?
1 votes
Vous pourriez utiliser __call. Mais s'il vous plaît, ne l'utilisez pas. Changer dynamiquement le comportement d'un objet est un moyen très facile de rendre votre code illisible et non maintenable.