Bonjour,
je recherche un moyen de faire de l'aggregate en php5.0 car la méthode n'est plus supporté.
aggregate permet d'ajouter les méthodes d'une classe dynamiquement à un objet
Merci pour votre aide![]()
PS: je recherche à le faire sans extension
Bonjour,
je recherche un moyen de faire de l'aggregate en php5.0 car la méthode n'est plus supporté.
aggregate permet d'ajouter les méthodes d'une classe dynamiquement à un objet
Merci pour votre aide![]()
PS: je recherche à le faire sans extension
ajouter des méthodes a un objet c'est impossible ça
tu veux lancer une fonction en fait?
Si c'est possible regarde![]()
http://fr2.php.net/aggregate
ouai j'ai du mal a comprendre comment ça marche et comme je suis en exam j'ai pas trop le temps de chercher
il y a ceci sur ta page
ça doit pouvoir t'aiderFor PHP5 applications, the aggregate functionality available through classkit has been incorporated into and replaced by runkit. Per the classkit page of the PHP manual:
"Note: This extension has been replaced by runkit, which is not limited to class manipulation but has function manipulation, as well."
http://php.net/manual/en/ref.runkit.php
Per the runkit page:
" This package is meant as a feature added replacement for the classkit package. When compiled with the --enable-runkit=classkit option to ./configure, it will export classkit compatible function definitions and constants."
AMHA tu ne pourras pas le faire de manière totalement transparente. Autant connaitre la liste des méthodes d'une classe est chose aisée, autant en affecter une nouvelle est ardu sans passer par __call(), ce qui implique de modifier ta classe et qu'elle sache qu'elle est "agreggable".Envoyé par laurent_h
Ou alors ce que tu pourrais faire, c'est définir dynamiquement une nouvelle classe, remplacer l'objet par une nouvelle instance qui se chargerait de s'occuper de l'aggregation.
un truc dans le genre (pseudo code):
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 function aggregate($object, $classname) { $class_name_of_object = get_class($object); AGGREGATOR = new $classname(); eval('class XXXX extends '. $class_name_of_object .' { function __call($method, $args) { if (method_exists($this, $method)) { return call_user_func_array(array($this, $method), $args); } else { return call_user_func_array(array(AGGREGATOR, $method), $args); } } }'); $object = new XXXX(); }![]()
Merci pour ces réponses
Mr N. pourrais tu me donner un exemple simplifié de la première solution ?
Pour la seconde solution, cela me parait un peu lourd non ?
et de plus, est ce que les propriétés de mon objets initiales sont conservées ?
Merci encore![]()
Je n'ai proposé qu'une solution, et encore ce n'est qu'un embryon de solution, une piste sans savoir si elle est viable
Donc de quelle(s) solution(s) parles-tu ?
Bonsoir,
je parlais de la méthode par __call()
sinon avez vous une piste pour faire de l'héritage multiple ?
Merci
Oui, l'aggregation
Mais j'entends aggregation "manuelle" :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 interface iavion { function vole(); } class avion implements iavion { function vole() { ... } } interface ibateau { function flotte(); } class bateau implements ibateau { function flotte() { ... } } class hydravion extends avion implements ibateau { function flotte() { $this->bateau->flotte(); } }
Partager