insérer une nouvelle fonction dans une classe lors de l'exécution

Eléphant du PHP | 259 Messages

11 août 2008, 21:41

Bonjour

pour générer les pages de mon site, je suis en train de créer un framework perso

je viens de tout passer en POO et je bloque sur un point :

quand on demande une page, on vérifie dans la bdd si elle existe, on charge une fichier qui contient une ou plusieurs fonctions, et on execute la fonction donnée dans la bdd

je voulais savoir comment je pourrais ajouter à la classe page, qui gère toute l'exécution de la page, une nouvelle fonction que l'on irait piocher dans un autre fichier php

sans faire d'include ... car çà crérait une fonction au sein d'une fonction

voila, si vous avez des idées n'hésitez pas

merci
l'hébergeur gratuit que j'utilisais: http://www.freeheberg.com (pas de limitte de débit, BP, 1à10Go, bdd mysql illimitées )
mainteant je suis chez OVH, payant mais plus adapté à de gros sites

ViPHP
ViPHP | 5924 Messages

11 août 2008, 23:22

sans faire d'include ... car çà crérait une fonction au sein d'une fonction
??
Que veux tu dire par là ?
Par ailleurs, ton message est plutôt incompréhensible…

ViPHP
ViPHP | 4039 Messages

12 août 2008, 10:14

huh ? Est-ce que tu voudrais ajouter une méthode à un objet ou à une classe ?
Mais qu'importe. (je suis ici - dernier petit projet)
Berze going social.

Eléphant du PHP | 259 Messages

12 août 2008, 13:28

slt

ce serait plutôt à un objet

++
l'hébergeur gratuit que j'utilisais: http://www.freeheberg.com (pas de limitte de débit, BP, 1à10Go, bdd mysql illimitées )
mainteant je suis chez OVH, payant mais plus adapté à de gros sites

ViPHP
ViPHP | 5924 Messages

12 août 2008, 13:35

Tu peux expliquer clairement (et en bon français) ce que tu veux ?

ViPHP
ViPHP | 4674 Messages

12 août 2008, 14:47

Hey :),

Je ne veux pas insister mais c'est vrai qu'on ne comprend rien à ce que tu veux dire. N'oublie pas une chose : « ce qui ce conçoit bien s'énonce clairement, et les mots pour le dire viennent aisément ». Exposes donc ton problème clairement, avec des exemples, voir même des bouts de code si ça peut t'aider à être plus clair. On est prêt à fournir un effort, mais tu dois en faire autant.
« Un handicap est le résultat d'une rencontre entre une déficience ou différence et une incapacité de la société à répondre à celle-ci. »

Hoa : http://hoa-project.net (sur @hoaproject).

Eléphant du PHP | 259 Messages

12 août 2008, 20:05

bonjour

je vais réexpliquer

je fait mon framework perso
quand un visiteur demande une page, on passe une adresse de type
j'extrait la variable
$page_nom=$_GET['page']
je fais une "protection" contre les injections ...

je créé une instance de la classe page
je lui fait vérifier si la page existe ( on regarde dans la bdd )
$page=new page();
$page->creation($page_nom);
après plusieurs étapes de vérifications ( autorisations ... )
on passe à l'exécution de la page

cette exécution se traduit par une ou plusieurs fonctions avec des suites d'actions
qui sont stockées sur un autre fichier php

j'aimerais savoir comment faire pour ajouter ces fonctions au sein de la classe

comme çà après je fais

$page->execution();

et dans la fonction execution :
$this->$page_fonction();
voila

merci
l'hébergeur gratuit que j'utilisais: http://www.freeheberg.com (pas de limitte de débit, BP, 1à10Go, bdd mysql illimitées )
mainteant je suis chez OVH, payant mais plus adapté à de gros sites

ViPHP
ViPHP | 5924 Messages

12 août 2008, 20:22

Est ce que tes fonctions doivent avoir accès au contexte de l'objet ?
Tes fonctions sont dans des fichiers php ?

Eléphant du PHP | 259 Messages

12 août 2008, 20:24

qui sont stockées sur un autre fichier php
oui elles sont dans des fichiers php

et oui elles agissent sur l'objet

merci
l'hébergeur gratuit que j'utilisais: http://www.freeheberg.com (pas de limitte de débit, BP, 1à10Go, bdd mysql illimitées )
mainteant je suis chez OVH, payant mais plus adapté à de gros sites

ViPHP
ViPHP | 5924 Messages

13 août 2008, 00:58

Alors j'aurais envie de dire que ce n'est pas possible. A la limite, les solutions possibles seraient :
- D'utiliser la méthode magique __call pour appeler une fonction, mais vu qu'il faut que la fonction soit dans le contexte objet, il faut l'évaluer par eval(), ce qui signifie que tu vas plomber tes performances, et éventuellement la sécurité.
- De générer toute la classe dynamiquement et la créer dans php par eval(), c'est encore pire que précédemment.
- De créer une classe fake englobant tes fonction et utiliser runkit et la fonction runkit_method_copy notamment pour copier ta méthode d'une classe à l'autre, mais c'est expérimental, éventuellement instable, et au comportement susceptible de changer.
- De changer ta structure et revoir tes contraintes, utiliser l'héritage par exemple, ou les relations entre objets, etc…

Donc tu l'auras compris, le problème est complètement dans une mauvaise conception de ton système, tu ne trouveras rien en explorant par là…

Eléphant du PHP | 443 Messages

13 août 2008, 08:24

Tu es en train de décrire un héritage tout simple (mais vu avec un oeil de gars qui fait du procédural).

-1, à un moment si tu connais les méthodes utilisables sur ton objet, c'est qu'à mon avis tu aurais très bien pu en faire une classe héritant de page.
-2, l'analyse de ton URL n'aboutit pas à la création d'une classe page générique, mais à l'instanciation de ton objet spécialisé (évoqué plus haut), héritant de page et créé via un pattern Factory.


Sinon, si franchement la liste des traitements chainés dans ta méthode page::execute() n'est réellement pas déterminable à la conception (ce qui m'étonnerait lourdement), tu peux très bien dans le corps de ta méthode execute(), faire des includes dynamiques effectués au runtime.


Tracker.

Petit nouveau ! | 8 Messages

20 août 2008, 19:10

Par contre ne confond pas Objet et Classe !

Une classe est un modèle d'objet !

Un objet est une instance de classe !
Julien BreuxDevelopper | DéveloppeurBlog

Now
• AFUP (Member)
• LMV (Internal developer & Project Manager)
• Prestashop (External developer)
• PHP6 (External conceptor)

Eléphant du PHP | 259 Messages

25 août 2008, 15:18

slt

je me suis débrouillé
avec une nouvelle classe qui génère le code et qui le donne ensuite à la classe chargée de gèrer la page

merci quand même

+
l'hébergeur gratuit que j'utilisais: http://www.freeheberg.com (pas de limitte de débit, BP, 1à10Go, bdd mysql illimitées )
mainteant je suis chez OVH, payant mais plus adapté à de gros sites

ViPHP
ViPHP | 5924 Messages

25 août 2008, 18:30

Permet moi de te dire que ta solution est tout simplement abbérante, pour les raisons suscitées…

Eléphant du PHP | 259 Messages

26 août 2008, 20:05

bonjour

pourrais tu me dire pourquoi ma solution est-elle ci abbérante ?

merci
l'hébergeur gratuit que j'utilisais: http://www.freeheberg.com (pas de limitte de débit, BP, 1à10Go, bdd mysql illimitées )
mainteant je suis chez OVH, payant mais plus adapté à de gros sites