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 :

[POO] "global" dans une classe


Sujet :

Langage PHP

  1. #1
    Membre éclairé
    Avatar de keaton7
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    743
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 743
    Points : 689
    Points
    689
    Par défaut [POO] "global" dans une classe
    Bonjour,

    J'utilise un bout de code (de calcul) en PHP mis a jour par un tiers.

    Pour ce faire j'ai une classe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    class MaClasse() {
     
     
      // ...
     
      public function calculer() {
     
        require("maPageDeCalcul") ;
     
      }
     
      //...
     
    }
    Dans la page incluse, il y a souvent des trucs comme ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    $toto = 12;
    $tata =10;
    $tutu = 16;
     
    function youpi() {
     
      global $toto,$tata;
     
      // ..
     
    }
    Le probleme, c'est que j'ai l'impression que le mot cle global, lorsqu'il est inclu dans une classe ne réagi plus pareil.

    Pour preuve, un affichage de $toto dans la fonction (devenue une méthode de ma classe du coup) ne renvoi rien, même pas une erreur ...

  2. #2
    Membre actif Avatar de Momodedf
    Inscrit en
    Juillet 2007
    Messages
    246
    Détails du profil
    Informations personnelles :
    Âge : 35

    Informations forums :
    Inscription : Juillet 2007
    Messages : 246
    Points : 221
    Points
    221
    Par défaut
    Normal, essayes plutôt ça :
    Code : 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
    17
    18
     
    // Pas de () après le nom de la classe ^^
    class MaClasse {
     
     
      // ...
     
      public function calculer() {
     
        require("maPageDeCalcul.php") ;
     
      }
     
    $test = new MaClasse();
    $test->calculer();
      //...
     
    }
    Dans la page incluse, il y a souvent des trucs comme ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    // ICI que c'est important
    global $toto,$tata;
    // *****************
    $toto = 12;
    $tata =10;
    $tutu = 16;
     
    function youpi() {
     
      global $toto,$tata;
      echo $toto . ' ' . $tata;
      // ..
     
    }

  3. #3
    Membre expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    Citation Envoyé par keaton7 Voir le message
    Bonjour,

    J'utilise un bout de code (de calcul) en PHP mis a jour par un tiers.

    Pour ce faire j'ai une classe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    class MaClasse() {
     
     
      // ...
     
      public function calculer() {
     
        require("maPageDeCalcul") ;
     
      }
     
      //...
     
    }
    Dans la page incluse, il y a souvent des trucs comme ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    $toto = 12;
    $tata =10;
    $tutu = 16;
     
    function youpi() {
     
      global $toto,$tata;
     
      // ..
     
    }
    Le probleme, c'est que j'ai l'impression que le mot cle global, lorsqu'il est inclu dans une classe ne réagi plus pareil.

    Pour preuve, un affichage de $toto dans la fonction (devenue une méthode de ma classe du coup) ne renvoi rien, même pas une erreur ...
    Salut, je ne crois pas que ce sera une méthode de classe.
    L'inclusion revient à ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    class MaClasse() {
        public function calculer() {
            $toto = 12;
            $tata =10;
            $tutu = 16;
     
            function youpi() {
                global $toto,$tata;
            }
        }
    }
    A vrai dire, je ne sais pas à quoi correspond cette fonction. Ce qui est sûr, c'est que c'est crade !
    Es-tu vraiment obligé de fonctionner ainsi ?

  4. #4
    Membre éclairé
    Avatar de keaton7
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    743
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 743
    Points : 689
    Points
    689
    Par défaut
    // Pas de () après le nom de la classe ^^
    Autant pour moi, j'ai tape ca vite fait

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    // ICI que c'est important
    global $toto,$tata;
    Je vais essayer ca.

    A vrai dire, je ne sais pas à quoi correspond cette fonction. Ce qui est sûr, c'est que c'est crade !
    Es-tu vraiment obligé de fonctionner ainsi ?
    Disons que ce calcul n'a pas été fait par un développeur, et comporte donc de gros défauts d'optimisation ... Je suis oblige a priori de l'utiliser ainsi.

    En fait, sur mon site, j'ai une conception full objet, et ca m'embêterai de caler des bouts de codes "hors objets", d'autant plus que les résultats de ces calculs correspondent exactement aux variables d'une classe prévue a cet effet.

    Ce qui est vrai aussi, c'est que je me creuse la tête depuis de très longs mois pour faire un truc très propre et que mettre du scotch comme ça, c'est pas très réjouissant ...

    Dilemme quoi ... Soit je refait le code de la personne et je lui impose, soit je bricole ...

  5. #5
    Membre éclairé
    Avatar de keaton7
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    743
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 743
    Points : 689
    Points
    689
    Par défaut
    A la rigueur, je pourrais forcer la création de (références de) variables dans le tableau superglobal $GLOBALS, par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    $GLOBALS["variablesCalcul"] = array();
     
    $GLOBALS["variablesCalcul"]["toto"]= 12;
    $GLOBALS["variablesCalcul"]["tata"]=10;
    $GLOBALS["variablesCalcul"]["tutu"] = &$_SESSION["tutu"];
     
    function youpi() {
     
      //  Du coup, ici j'utilise mes variables $GLOBALS ...
     
      // ..
     
    }
    ou alors encore mieux :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
     
    $toto= 12;
    $tata=10;
    $tutu = &$_SESSION["tutu"];
     
    function youpi(&$toto,
                   &$tata,
                   &$tutu) {
     
      // ..
     
    }
    Vous feriez quoi vous ?

Discussions similaires

  1. [POO] Probléme de syntaxe dans une classe
    Par jewelz dans le forum Langage
    Réponses: 3
    Dernier message: 03/11/2007, 03h57
  2. Réponses: 4
    Dernier message: 17/03/2007, 01h06
  3. [POO] import d'objet dans une classe
    Par wdionysos dans le forum Langage
    Réponses: 3
    Dernier message: 01/04/2006, 21h05
  4. Réponses: 2
    Dernier message: 17/12/2005, 20h52

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