redéfinir dynamiquement une méthode de classe

Petit nouveau ! | 3 Messages

28 juin 2010, 12:19

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

ViPHP
ViPHP | 5462 Messages

28 juin 2010, 12:23

sans rien modifié tu peux pas

ViPHP
AB
ViPHP | 5818 Messages

28 juin 2010, 19:41

Oui effectivement comme dit stealth35 ... Si un code ne fait pas ce que tu veux et que tu ne veux rien modifier... :lol:

Ou alors il faudrait nous dire ce que tu entends par "rien modifier" :wink:

Mammouth du PHP | 661 Messages

29 juin 2010, 00:22

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

Code : Tout sélectionner

TheClass.bonjour = function(){return "AuRevoir";}
à 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]}();
@++

Petit nouveau ! | 3 Messages

29 juin 2010, 09:12

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

Mammouth du PHP | 568 Messages

29 juin 2010, 09:55

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().

Petit nouveau ! | 3 Messages

29 juin 2010, 10:24

Oui mais mon "noyau applicatif" va continuer d'appeler TheClass et pas TheClass2, non ?

ViPHP
ViPHP | 5462 Messages

29 juin 2010, 11:47

en php 5.3 ça doit pouvoir se faire avec les fonctions anonymes

Mammouth du PHP | 568 Messages

29 juin 2010, 14:14

Oui mais mon "noyau applicatif" va continuer d'appeler TheClass et pas TheClass2, non ?
A ba oui. Autant pour moi.