1

Je voudrais faire de l’héritage dynamique en PHP : j’ai une classe de base que je veux instancier et ensuite je veux redéfinir une de ses opérations. Je ne peux pas faire d’héritage statique simple car le contenu de l’opération que je veux redéfinir dépend de l’exécution. Est-ce que c’est possible avec PHP 5.1 ?

Au final je dois pouvoir écrire un code de ce genre : $objet = MaClasseDeBase(); $objet->operationARedefinir = ... $objet->operationARedefinir();

Pour info, c’est une opération qui ne fait que renvoyer une array.
avatar
« Quand le dernier arbre sera abattu, la dernière rivière empoisonnée, le dernier poisson capturé, alors vous découvrirez que l'argent ne se mange pas. »

2

jamais fait, et je trouve va pas très propre...

je te conseillerais plutot de prévoir des sous méthodes privées pour ton opération principale, et de lui passer en paramètre le nom du traitement que tu veux qu'elle fasse.

$objet->operationARedefinir('traitement_1');
Ancien pseudo : lolo

3

C'est pas forcément évident à faire en PHP, parceque les fonctions sont gérées d'une façon bien particulière. Il y a bien une façon pour appeler une fonction à partir de son nom (donc d'une chaine), mais ça ne marchera pas si le nom est un attribut de ta classe puisque la syntaxe pour accéder à un attribut ($o->attribute) est la même que pour une méthode ($o->method(...)) :/

Du coup je ne vois pas trop comment faire sans passer par deux méthodes, un peu dans ce style : <?php function attached ($this) { echo 'OK'; } class A { public $method; public function callback () { call_user_func ($this->method, $this); } } $a = new A (); $a->method = 'attached'; $a->callback (); ?>
C'est applicable aussi si "attached" doit être une autre méthode de "A" et non une fonction externe, mais mais c'est quand même hyper laid ^^

(en revanche je ne suis pas d'accord avec Spipu, il a des situations où ça peut être une bonne solution, c'est juste la faiblesse du PHP qui rend ça périlleux)
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

4

en php 5 y'a il me semble une fonction magique __call qui est appelée si une méthode de classe n'est pas définie.

5

Ah oui pas con, tu peux faire une classe qui appelle automatiquement la méthode contenue dans l'attribut "->a" si on appelle une méthode "->a" qui n'existe pas. C'est très moche aussi par construction, mais au moins dans ton code appelant ça ressemblera à quelque chose de plus classique smile
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

6

ah oui en effet, j'ai également pas pensé aux magics smile
Ancien pseudo : lolo

7

Merci pour vos réponses smile

Et, histoire de troller un peu wink je ne trouve pas que ce ne soit pas propre de définir dynamiquement une fonction sur un objet. PHP est un peu comme Python à ce niveau : c’est au programmeur d’être responsable, de savoir ce qu’il fait.

Pour info, vous connaissez quoi comme bon IDE pour du développement Web ? (après ça dépend sûrement aussi des technos web utilisées… Disons pour du PHP ou du Python, avec ou sans utilisation de frameworks)
avatar
« Quand le dernier arbre sera abattu, la dernière rivière empoisonnée, le dernier poisson capturé, alors vous découvrirez que l'argent ne se mange pas. »

8

perso, pour PHP, je code soi sous PHP-eclipse, soit directement sous VIM, suivant sur quelle machine je code

et comme framework PHP, j'utilise pour le boulot Symfony, et pour le perso mon propre framework
Ancien pseudo : lolo