Page 1 sur 1
redéfinir dynamiquement une méthode de classe
Posté : 28 juin 2010, 12:19
par abcbien
Bonjour,
est-il possible de redéfinir dynamiquement une méthode de classe?
Exemple:
class TheClass
{
function bonjour() {
echo "bonjour\n";
}
};
Sans modifier le code source de TheClass, comment faire en sorte qu'à partir de maintenant, l'appel de la méthode bonjour de toute (nouvelle) instance de TheClass (et PAS d'une sous-classe de TheClass) réponde "au revoir" ?
D'avance, merci pour votre aide,
Alain
Re: redéfinir dynamiquement une méthode de classe
Posté : 28 juin 2010, 12:23
par stealth35
sans rien modifié tu peux pas
Re: redéfinir dynamiquement une méthode de classe
Posté : 28 juin 2010, 19:41
par AB
Oui effectivement comme dit stealth35 ... Si un code ne fait pas ce que tu veux et que tu ne veux rien modifier...
Ou alors il faudrait nous dire ce que tu entends par "rien modifier"

Re: redéfinir dynamiquement une méthode de classe
Posté : 29 juin 2010, 00:22
par Nours312
je crois qu'il cherche un equivalent à javascript (entre autre) dont les "methodes" (ou éléments) de l'objet 'TheClass' pourrait etre modifiés dynamiquement !... du style
à ma connaissance, c'est impossible, ce sont des classes et non des objet dynamiques ... mais je peux me tromper ^^
Edit :: par contre tu peux tout a fait envisager un truc du style :
class TheClass
{
public $meth = array("bonjour", "bye");
function bonjour() {
echo "bonjour\n";
}
function bye() {
echo "au revoir\n";
}
};
$i = 0;
$inst = new TheClass();
$inst->{TheClass->meth[$i]}();
$i = 1 ;
$inst->{TheClass->meth[$i]}();
@++
Re: redéfinir dynamiquement une méthode de classe
Posté : 29 juin 2010, 09:12
par abcbien
Je cherchais effectivement une solution "à la javascript". Je n'ai pas vraiment accès au code source dans le sens où je dois l'étendre (créer un plugin) mais je ne peux pas altérer le code source du noyau sous peine de devoir recommencer le patch lors du prochain upgrade.
Peut-être par un nouvel include peut-on remplacer du code déjà charger par le compilateur ?
Jeune PHPiste, j'espère que ma question n'est pas délirante.
En tout cas, merci. Je suis impressionné par votre réactivité.
Alain
Re: redéfinir dynamiquement une méthode de classe
Posté : 29 juin 2010, 09:55
par Yosh
Je cherchais effectivement une solution "à la javascript". Je n'ai pas vraiment accès au code source dans le sens où je dois l'étendre (créer un plugin) mais je ne peux pas altérer le code source du noyau sous peine de devoir recommencer le patch lors du prochain upgrade.
Peut-être par un nouvel include peut-on remplacer du code déjà charger par le compilateur ?
Jeune PHPiste, j'espère que ma question n'est pas délirante.
En tout cas, merci. Je suis impressionné par votre réactivité.
Alain
Tu peux faire un include d'une class TheClass2 qui étend TheClass et tu surcharge ta méthode bonjour().
Re: redéfinir dynamiquement une méthode de classe
Posté : 29 juin 2010, 10:24
par abcbien
Oui mais mon "noyau applicatif" va continuer d'appeler TheClass et pas TheClass2, non ?
Re: redéfinir dynamiquement une méthode de classe
Posté : 29 juin 2010, 11:47
par stealth35
en php 5.3 ça doit pouvoir se faire avec les
fonctions anonymes
Re: redéfinir dynamiquement une méthode de classe
Posté : 29 juin 2010, 14:14
par Yosh
Oui mais mon "noyau applicatif" va continuer d'appeler TheClass et pas TheClass2, non ?
A ba oui. Autant pour moi.