Précédent   Forum des professionnels en informatique > PHP > Langage > Fichiers
Fichiers Forum d'entraide sur les fichiers avec PHP. Avant de poster -> FAQ fichiers et Sources fichiers
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 03/04/2007, 10h31   #1
Membre à l'essai
 
Inscription : mars 2007
Messages : 69
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 69
Points : 20
Points : 20
Par défaut sauver une variable entre deux fonctions ?

Bonjour,
voila je sais que dans des langages comme le C si une variable est definie dans une fonction lorsque cette derniere est terminer, la variable est détruite.
il ya donc des moyens de faire persister cette variable lors de la fermeture de la fonction en changeant je croi la nomenclature lors de la definition de la variable.

en PHP c'est apparement la meme chose mais je ne sais pas comment faire pour sauvegarder ma variable outre la fonction
faut il la definir d'une certaine fasson?

j'ai tenter d'utiliser return $mafonction mais ca n'a pas l'aire de fonctionner.

avez vous la solution?
merci d'avance.
shloka est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/04/2007, 10h43   #2
Membre actif
 
Avatar de Azazel.fr
 
Inscription : mars 2007
Messages : 170
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 170
Points : 177
Points : 177
si tu appeles une fonction ainsi :
Code :
$resultat = appelFonction($param1Eventuel,$param2Eventuel);
et que ta fonction est ainsi :
Code :
1
2
3
4
5
function appelFonction($param1,$param2)
{
//traitement...
return $valeur;
}
ta variable $resultat sera == à ta variable $valeur de la fonction

je ne sais pas si ça répond à ta question...
tu peux également retourner un booléen, un tableau, etc...
Azazel.fr est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/04/2007, 11h01   #3
Membre confirmé
 
Avatar de max44410
 
Étudiant
Inscription : juin 2003
Messages : 426
Détails du profil
Informations personnelles :
Âge : 29

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juin 2003
Messages : 426
Points : 259
Points : 259
Envoyer un message via MSN à max44410 Envoyer un message via Skype™ à max44410
Autre solution est de passer ta variable en adresse

Code :
1
2
 
appelFonction($param1Eventuel,$param2Eventuel,&$resultat);
Code :
1
2
3
4
5
function appelFonction($param1,$param2,$result)
{
//traitement...
$result=$valeur;
}
__________________
Venez voir par là...
max44410 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/04/2007, 11h11   #4
Membre à l'essai
 
Inscription : mars 2007
Messages : 69
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 69
Points : 20
Points : 20
ho vous etes rapides ^^
bon et bien voila
j'essai donc vos solution
la fonction fait bien 200 lignes


jai donc ecrit a la fin de ma fonction:
elle est appelé de cette fasson:
Code :
    spgm_DisplayPicture($strParamGalleryId, $strParamPictureId, $strParamFilterFlags);
je fait donc à la suite :
Code :
1
2
	$result=spgm_DisplayPicture($strParamGalleryId, $strParamPictureId, $strParamFilterFlags);
echo"$result";
pourant je n'ai pas de valeur pour $result
max je n'est pas vraiment compris tu crée une seconde variable dans la fonction?
si c'est le cas j'ai essayé mais cela revien au meme puisque la nouvelle variable est détruite lors de la fermeture de la fonction.
shloka est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/04/2007, 11h29   #5
Membre à l'essai
 
Inscription : mars 2007
Messages : 69
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 69
Points : 20
Points : 20
Bon jai recommencé l'opération et finalement sa marche si je ne double pas l'apelle de la fonction donc sa marche !
je vous remerci Azazel et Max de votre rapidité et de votre pertinence sa fait plaisir!!
à bientot!
shloka est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/04/2007, 11h53   #6
Membre confirmé
 
Avatar de max44410
 
Étudiant
Inscription : juin 2003
Messages : 426
Détails du profil
Informations personnelles :
Âge : 29

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juin 2003
Messages : 426
Points : 259
Points : 259
Envoyer un message via MSN à max44410 Envoyer un message via Skype™ à max44410
Citation:
Envoyé par shloka
Bon jai recommencé l'opération et finalement sa marche si je ne double pas l'apelle de la fonction donc sa marche !
je vous remerci Azazel et Max de votre rapidité et de votre pertinence sa fait plaisir!!
à bientot!

non tu ne créer pas de nouvelle variable, tu passes seulement l'adresse d'une variable dans laquelle tu veux que ta fonction ecrive. Du coup meme quand la fonction est terminer il ne detruit pas la variable car il s'est juste servit de l'adresse memoire de ta variable pour ecrire dans cette case memoire.

normalement si tu regardes le contenu de ta variable $result après le passage dans ta fonction, il a du changer.

mais par contre je me suis trompé dans le code c'est pour cela que ça ne fonctionne pas.

Dans fonction 1 :
Code :
1
2
 
appelFonction($param1Eventuel,$param2Eventuel,$resultat);
Dans fonction 2 :
Code :
1
2
3
 
function appelFonction($param1,$param2,&$result)
{ //traitement... $result=$valeur; }
Dans fonction 1 :
Code :
1
2
 
var_dump($resultat);
Il me semble que c'est appelé passage en référence. Cela te permet entre autre d'économiser de la mémoire.

Pour info
__________________
Venez voir par là...
max44410 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/04/2007, 12h19   #7
En attente de confirmation mail
 
Inscription : juin 2002
Messages : 6 164
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 6 164
Points : 6 404
Points : 6 404
Les solutions en PHP sont semblables au C :
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/04/2007, 13h52   #8
Membre à l'essai
 
Inscription : mars 2007
Messages : 69
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 69
Points : 20
Points : 20
ha c ce que je cherchai au départ
normalement une variable static doit persister tout le long du code non?
donc si j'écrit
Code :
1
2
3
4
5
fonction  ( ){
static $variable=0;
$variable="cest/par/ici.php";
}
apel fonction();
si je fait

le code html générer serai
mais sa ne marche pas ... mon echo n'affiche rien
cette solution m'interesse car la premiere pose des probleme par la suite ...
alors ya t'il une erreur dans ce que j'ai fait? car que je mette static ou rien, c'est la meme chose.
max ton code a l'air interessant car il sauvegarde le resultat de ma variable , jai juste du mal a le metre en place ... ^^


EDIT: ah aprés avoir regarder l'aide sur les variable static voila ce qui est dit:
Citation:
Une variable statique est uniquement utilisée dans le corps des fonctions. Elle n'est pas accessible à l'extérieur de la fonction où elle est déclarée.
donc il me faudrai la meme chose c'est a dire une conservation de la variable et de sa valeu dans la memoire ...
et que je puisse l'utilisé en dehors de la fonction
shloka est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/04/2007, 14h21   #9
En attente de confirmation mail
 
Inscription : juin 2002
Messages : 6 164
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 6 164
Points : 6 404
Points : 6 404
La théorie :
Comme en C, vous ne pourrez pas accéder à une variable locale à une fonction depuis l'extérieur avec son simple nom (ie sans référence, retour de fonction, ...). static assure sa survie après la fin de la fonction mais ne vous donne pas le droit d'y accéder dans un contexte autre que celui de la fonction. On peut facilement contourner cela à l'aide d'une variable globale faisant référence à la variable locale :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
function x() {
   static $pomme = 0;
   $pomme++;
   if (!isset($GLOBALS['fruit'])) {
       $GLOBALS['fruit'] =& $pomme;
   }
}
 
x();
echo $fruit;
x();
echo $fruit;
A ne pas utiliser bien sûr, mais ici la variable globale $fruit représente en réalité la variable locale $pomme de la fonction x.

La pratique : choisir la solution la plus pratique suivant votre cas, évitez autant que possible les solutions tordues comme celle ci-dessus. Par rapport à cela, vous ne nous avez pas montré votre code (la fonction et la manière dont elle appelée à plusieurs reprises selon vos dires). La persistance (variables static) est rarement utilisée en PHP et il convient de distinguer persistance et portée des variables. Par ailleurs, signalons que les variables de session sont à la fois persistantes (accessibles sur plusieurs pages) et globales (utilisables telles quelles depuis n'importe quelle fonction) mais ne concernent pas les variables de type ressources (dû à l'opération de sérialisation). Plus d'informations sur les sessions http://php.developpez.com/cours/sessions/
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/04/2007, 14h23   #10
Membre à l'essai
 
Inscription : mars 2007
Messages : 69
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 69
Points : 20
Points : 20
je sais bien que le but des fonctions est d'optimiser la consomation de mémoire
seulement je reprends un code de galerie photo et je cherche à passer une variable venant d'une fonction dans flash
enfin bon le code n'est pas fait pour ça donc je dois me débrouiller pour sortir cette variable.
les variables sessions ... oui mais c'est pas un peut trop pour une variable que je n'utilise que dans un fichier?
enfin c'est une possibilité ... je vais essayer ^
shloka est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/04/2007, 14h38   #11
Membre à l'essai
 
Inscription : mars 2007
Messages : 69
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 69
Points : 20
Points : 20
Bon et bien l'utilisation des session fonctionne aussi bien que return
donc merci sa marche ...
mais pas pour la transition en flash mais sa c'est une autre histoire!
hop résolu!
merci
shloka est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 06h10.


 
 
 
 
Partenaires

Hébergement Web