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 :

portée "globale" d'une variable


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 495
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 495
    Billets dans le blog
    1
    Par défaut portée "globale" d'une variable
    Bonsoir,

    mon objectif est de pouvoir affecter une valeur à une variable en un endroit d'un script et que cette variable soit accessible à un autre endroit de ce script, et au cours d'un autre appel de ce script.

    Ayant déjà vu que la rendre global était mal, j'ai cherché une autre solution :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    function setOrGetMessage($value){
        static $message = "";
     
        if ($value == "")
            return $message;
        else {
            $message = $value;
        }
    }

    Donc pour affecter une valeur à la variable $message, on peut faire setOrGetMessage('my_value'); et pour en afficher la valeur echo(setOrGetMessage(''));. La portée static de la variable doit rendre pérenne sa valeur lors d'un autre appel du script (à l'instant t1, j'exécute le script et mets la variable à la valeur value1 puis je sors du script, puis le réexécute ; la variable a gardé sa valeur value1 que je peux afficher en faisant t2 echo(setOrGetMessage(''));).

    Mon idée échoue, vu que quand j'affiche la valeur de la variable, elle est toujours nulle alors que je l'ai déjà mise à une valeur non nulle.

    Comment je le vérifie ?

    J'ai un peu modifié la fonction :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    function setOrGetMessage($value){
        static $message = "empty";
     
        if ($value == "")
            return $message;
        else {
            $message = $value;
        }
    }

    Lors d'un appel du script, je modifie la valeur de la variable : setOrGetMessage('Vous devez saisir le nom d\'une ville.');. Lors d'un second appel du script, j'affiche la valeur de la variable : echo(setOrGetMessage('')); mais celle-ci vaut encore empty. Sa valeur n'a donc pas été modifiée.
    Quelle est l'erreur, SVP ?

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Ceci pourrait peut-être aider?
    https://www.php.net/manual/en/function.msg-receive.php

  3. #3
    Membre Expert
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 495
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 495
    Billets dans le blog
    1
    Par défaut
    Merci pour la réponse.
    En attendant, je suis parti sur une solution à base de POO. Mais c'est pas encore au point :

    msg.php :
    Code php : 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
    <?php
    namespace dvp;
     
    class msg
    {
        public static $msg = "";
     
     
        static public function setMsg($value){
            self::$msg = $value;
        }
     
        static public function getMsg(){
            return(self::$msg);
        }
    }

    search.php :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <?php
      use dvp\msg;
    ...
    msg::getMsg();  //ici la ligne 68
    ?>

    Fatal error: Uncaught Error: Class "dvp\msg" not found in C:\projets\dvp\divers\dvp\search.php:68 Stack trace: #0 {main} thrown in C:\projets\dvp\divers\dvp\search.php on line 68
    Je ne comprends pas pourquoi il ne trouve pas la classe...(je suis en local)

  4. #4
    Membre très actif
    Homme Profil pro
    libre
    Inscrit en
    Juin 2019
    Messages
    205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : libre

    Informations forums :
    Inscription : Juin 2019
    Messages : 205
    Par défaut
    Vous voulez que la variable dure pendant toute la session de l'utilisateur si c'est le voir avec les variables de session $_SESSION

  5. #5
    Membre émérite
    Homme Profil pro
    Autre
    Inscrit en
    Juillet 2021
    Messages
    473
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Juillet 2021
    Messages : 473
    Par défaut
    Bonjour,

    Le mot clé static ne permet pas de persister une données entre plusieurs appels.
    En POO, le mot clé static permet de définir dans une classe des méthodes ou propriétés statiques qui pourront être utilisées sans instancier un objet de la classe : https://www.php.net/manual/fr/language.oop5.static.php

    Pour persister une données entre plusieurs appels, il faut effectivement se tourner vers les variables de session ou un autre moyen de stockage (bdd, fichier, etc.).

    Concernant l'erreur fatale, il faut faire un require de la classe msg.php pour pouvoir l'utiliser dans search.php (ou utiliser un autoload).

    Bonne journée,

  6. #6
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 693
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 693
    Par défaut
    Il faut bien comprendre qu'une fois l'execution de ton code terminé , plus rien n'existe.
    il est donc normal que quand tu exécute une seconde fois ton script , la variable n'a plus sa valeur.

    Contrairement à un applicatif plus classique où le code exécuté peux vivre en permanence , le context d'exécution ne survie que le temps d'execution du code , rien de plus.

    La solution à ton problème c'est :
    * Ecrire la valeur dans un fichier => Si cette valeur est identique pour tous les utilisateurs. (Attention aux risque d'accès concurrent, si bcp sollicité)
    * Ecrire en session => Si différent pour chaque utilisateur et durée de vie limité à la session
    * Ecrire en bdd => Si différent pour chaque utilisateur et durée de vie longue.
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  7. #7
    Membre Expert Avatar de vttman
    Homme Profil pro
    Développeur "couteau mosellan"
    Inscrit en
    Décembre 2002
    Messages
    1 140
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur "couteau mosellan"
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 140
    Par défaut
    Citation Envoyé par Pytet Voir le message
    ...
    Pour persister une données entre plusieurs appels, il faut effectivement se tourner vers les variables de session ou un autre moyen de stockage (bdd, fichier, etc.).
    ...
    +1 : Bdd

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 13/05/2020, 13h07
  2. Réponses: 3
    Dernier message: 04/02/2019, 14h53
  3. Problème de quote dans une variable
    Par hvincent dans le forum Développement
    Réponses: 3
    Dernier message: 06/09/2018, 10h41
  4. [AC-2002] Quotes dans une variable
    Par Domi2 dans le forum VBA Access
    Réponses: 2
    Dernier message: 23/06/2009, 17h51
  5. quotes dans une variable
    Par requiemforadream dans le forum ASP
    Réponses: 3
    Dernier message: 09/05/2005, 10h55

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