|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Nouveau Membre du Club
![]() Pascal SandrezIngénieur développement matériel électronique Inscription : janvier 2005 Messages : 101 ![]() |
Bonjour
J'ai un fichier php (A.php par exemple) qui réalise certaines opérations, et dont je récupère le résultat depuis un autre fichier (main.php) de cette manière : Code :
Depuis main.php j'ai besoin d'apeller get_data() plusieurs fois. Cela marche bien lorsque la function get_data() est appelée une première fois, mais les fois suivantes => problème de redéclaration de fonction. Je précise que mettre include_once() ne résout pas mon problème car dans ce cas le fichier A.php n'est executé qu'une fois et pas à chaque appel de get_data(). Le problème est assez ciblé (j'espère l'avoir bien décrit) mais je vois pas de solution simple. Avez vous une idée ? Merci beaucoup de votre aide |
||
|
|
00
|
|
|
#2 |
|
Membre Expert
![]() Étudiant Inscription : février 2004 Messages : 2 168 ![]() |
Salut,
Je ne sais plus si les erreurs de redéclarations sont des Notice ou Warning. Si se sont des Notice, mets juste un @ devant la fonction pour masquer l'erreur. Sinon est ce que ce ne serait pas possible d'inclure le fichier A.php avant toute fonction (dont get_data()) dans main.php, mais de rendre global les variables s'y trouvant pour les rendre disponibles aux fonctions qui suivent (dont get_data()) ? |
|
|
00
|
|
|
#3 |
![]() ![]() Inscription : septembre 2005 Messages : 1 741 ![]() |
pourquoi ne pas initialiser tes variable de A à false ou '' ?!
|
|
|
00
|
|
|
#4 | ||
|
Nouveau Membre du Club
![]() Pascal SandrezIngénieur développement matériel électronique Inscription : janvier 2005 Messages : 101 ![]() |
Merci de vos réponses mais ce n'est pas si simple en fait. Dans le fichier A.php, il y a plusieurs opérations effectuées qui dépendent d'un paramètre de get_data().
Plus précisément cela est réalisé de cette façon Code :
Le fichier A.php peut être executé seul (par requete http simple), il trouve son parametre dans $_GET et renvoi le resultat sur la sortie standard. Dans le cas ou il est executé par un autre fichier, il ne renvoi rien sur la sortie standard, la fonction get_data me permet de récupérer le résultat. Ca aurait pu marcher trés bien avec file_get_contents mais je suis en safe_mode et je ne peux pas me servir de cette fonction. |
||
|
|
00
|
|
|
#5 | |
|
Membre Expert
![]() Étudiant Inscription : février 2004 Messages : 2 168 ![]() |
J'ai tilté sur une chose que j'ai pas compris:
Citation:
|
|
|
|
00
|
|
|
#6 |
|
Membre Expert
![]() Inscription : juillet 2004 Messages : 1 033 ![]() |
dans le fichier A.php dissocie fonction et usage. Et pour appeler tes fonctions utilise un require_once dans A.php.
Tu as un sérieux souci de conception. |
|
|
00
|
|
|
#7 | ||
|
Nouveau Membre du Club
![]() Pascal SandrezIngénieur développement matériel électronique Inscription : janvier 2005 Messages : 101 ![]() |
en reposant mon probleme de facon différente :
Code :
Plus d'explications : http://fr.php.net/manual/fr/language.functions.php Une solution à mon problème : réduire la définition de f2() à l'interieur de f1() seul. Mais comment faire ? |
||
|
|
00
|
|
|
#8 |
|
Membre Expert
![]() Étudiant Inscription : février 2004 Messages : 2 168 ![]() |
La seule façon c'est de sortir ta fonction de A.php vers un autre fichier encore.
|
|
|
00
|
|
|
#9 |
|
Nouveau Membre du Club
![]() Pascal SandrezIngénieur développement matériel électronique Inscription : janvier 2005 Messages : 101 ![]() |
L'erreur est de type "Fatal error" donc pas de @ possible.
Sinon concernant la conception je suis plutot débutant, compte tenu de mes connaissance en programmation je suis impressionné par ce que j'ai déjà réalisé (j'ai commencé le HTML/CSS/javascript/PHP/mysql il y a 1 an et demi). Là où je viens d'améliorer considérablement mon site, je me rend compte aujourd'hui que j'aurais pu faire mieux (notament en faisant plus de classes), mais j'aimerais autant ne pas repartir à zéro. Je comprend les bases de la programmation orientée objet mais c'est pas naturel, tant pis je le saurais pour la prochaine fois... |
|
|
00
|
|
|
#10 |
|
Membre actif
![]() Inscription : avril 2006 Messages : 300 ![]() |
Salut,
Une question bête, pourquoi mettre f2() dans f1() ? Il ne serait pas plus simple d'appeler f2() depuis f1()? On utilise souvent un fichier du genre "common_functions.php" qui regroupe les fonctions appelées depuis différentes pages... Ou alors si les fonctions sont indissociables, peut-être faire un objet, avecf1() comme constructeur. |
|
|
00
|
|
|
#11 | ||||||||
|
Membre Expert
![]() Inscription : juillet 2004 Messages : 1 033 ![]() |
Citation:
fichier a.php Code :
fichier main.php De cette façon a.php sera inclut autant de fois que necessaire, et donc les variables seront ré attribuer ect. Mais le fichier a.fonction.php ne sera appelé qu'une et une seule fois. Donc tu n'auras plus de souci de fonction déja déclarés ect. Sinon il existe une fonction qui s'appele function_exist( string func_name ). Qui s'utlise ainsi : Code :
Je rajouterais que la conception n'est pa un domaine liés seulement à l'OO. L'OO n'à été inventé que pour formaliser et améliorer ce qui pouvait se faire en procédural à l'époque de jérusalem. Mieu vaut un pondre un code bien chiader en procédural avec une conception correct, qu'une grosse m**** en OO juste parce que c'est la mode. Citation:
Ceci dit, rien ne t'emepche aussi de te documenter, ou de demander de l'aide, avant de te lancer pour atteindre un résultat plus satisfaisant dès le premier coup xD Fin voila. bbye |
||||||||
|
|
00
|
|
|
#12 | |
|
Membre actif
![]() Inscription : avril 2006 Messages : 300 ![]() |
Ta réponse est pertinente, ePoX,
Citation:
J'ai par exemple pour habitude, quand j'arrive à trop de boucles imbriquées, de m'arrêter et de me demander si c'est la bonne solution... Je ne compte plus le nombre de fois où je suis reparti de zéro pour attaquer le problème différemment |
|
|
|
00
|
|
|
#13 | ||
|
Membre actif
![]() Inscription : mai 2004 Messages : 262 ![]() |
Salut,
J'avoue que : Code :
Donc, je rejoins l'avis de quelques autres, tu as un problème de conception : essaie de sortir cette fonction et ça devrais résoudre ton problème. Je crains que les require_once ou autres ne te servent qu'à compliquer un peu plus ton code A priori, je vois pas pourquoi tu serais obligé de définir cette fonction "imbriquée", ch'uis sur que tu peux faire autrement... Vérifie le découpage de ton fichier inclus, sorts en ce que tu utilises plusieurs fois (tes fonctions, par exemple) et utilise un include lorsque tu dois les appeler. Continue à t'arracher les cheveux (si y t'en reste Bon courage |
||
|
|
00
|
|
|
#14 | ||||
|
Nouveau Membre du Club
![]() Pascal SandrezIngénieur développement matériel électronique Inscription : janvier 2005 Messages : 101 ![]() |
Merci de vos réponses.
Pour préciser un petit peu plus, ca se passe comme ca : Dans le fichier A.php : Code :
Dans le fichier main.php Code :
Je voulais éviter de faire des milliers de fichiers, et en fait je m'en doutait un peu, il faut bien sortir la fonction f2() de A.php. J'ai bien un fichier 'common.php' mais il y a tellement de fonctions que je voulais pas rajouter f2() qui n'est en fait utilisé que par A.php. Sinon au sujet de la prog OO, je me rend compte que dans mon cas, ca aurait été justifié. Mais en commencant j'avais un peu de mal à modéliser tous les problèmes. Ca m'aurait évité de faire des include dans des fonctions. Mais je vous rassure tout n'est pas si tordu dans le reste du site. Par contre si vous avez des propositions de conception pour réaliser tout cela je suis preneur. Je me rends compte que c'est un peu foireux mais je sais pas trop quoi changer pour améliorer cela. |
||||
|
|
00
|
Copyright © 2000-2012 - www.developpez.com