IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

sauver une variable entre deux fonctions ?


Sujet :

Langage PHP

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mars 2007
    Messages : 69
    Points : 36
    Points
    36
    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.

  2. #2
    Membre habitué Avatar de Azazel.fr
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    170
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 170
    Points : 196
    Points
    196
    Par défaut
    si tu appeles une fonction ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $resultat = appelFonction($param1Eventuel,$param2Eventuel);
    et que ta fonction est ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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...

  3. #3
    Membre averti Avatar de max44410
    Étudiant
    Inscrit en
    Juin 2003
    Messages
    426
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2003
    Messages : 426
    Points : 301
    Points
    301
    Par défaut
    Autre solution est de passer ta variable en adresse

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    appelFonction($param1Eventuel,$param2Eventuel,&$resultat);
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    function appelFonction($param1,$param2,$result)
    {
    //traitement...
    $result=$valeur;
    }

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mars 2007
    Messages : 69
    Points : 36
    Points
    36
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
        spgm_DisplayPicture($strParamGalleryId, $strParamPictureId, $strParamFilterFlags);
    je fait donc à la suite :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mars 2007
    Messages : 69
    Points : 36
    Points
    36
    Par défaut
    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!

  6. #6
    Membre averti Avatar de max44410
    Étudiant
    Inscrit en
    Juin 2003
    Messages
    426
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2003
    Messages : 426
    Points : 301
    Points
    301
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    appelFonction($param1Eventuel,$param2Eventuel,$resultat);
    Dans fonction 2 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    function appelFonction($param1,$param2,&$result)
    { //traitement... $result=$valeur; }
    Dans fonction 1 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  7. #7
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 778
    Points
    17 778
    Par défaut
    Les solutions en PHP sont semblables au C :

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mars 2007
    Messages : 69
    Points : 36
    Points
    36
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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:
    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

  9. #9
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 778
    Points
    17 778
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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/

  10. #10
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mars 2007
    Messages : 69
    Points : 36
    Points
    36
    Par défaut
    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 ^

  11. #11
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mars 2007
    Messages : 69
    Points : 36
    Points
    36
    Par défaut
    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

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 5
    Dernier message: 12/11/2010, 09h45
  2. Passer une variable entre 2 fonctions
    Par mihaispr dans le forum Interfaces Graphiques
    Réponses: 2
    Dernier message: 29/03/2009, 20h12
  3. passer une variable entre deux classes as3
    Par sanatou dans le forum ActionScript 3
    Réponses: 1
    Dernier message: 27/06/2008, 21h52
  4. Partager une variable entre deux sites web
    Par debutantasp dans le forum ASP
    Réponses: 3
    Dernier message: 12/05/2008, 20h03
  5. Passer une variable entre deux fenêtres
    Par DeezerD dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 17/08/2005, 09h52

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo