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] La valeur de l'attribut ne change pas...


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2003
    Messages
    14
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 14
    Points : 15
    Points
    15
    Par défaut [POO] La valeur de l'attribut ne change pas...
    Bonjour,

    Je me mets doucement à l'objet et dès ma première classe, j'ai un problème concernant le passage par référence.

    Voici un code d'exemple pour expliquer mon problème :

    Mes classes :
    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
    19
    20
    21
    class bdd {
       var $nb;
     
       function bdd() {
          $this->nb = 0;
       }
     
       function req() {
          $this->nb ++;
       }
     
    }
     
    class toto{
     
       function toto($bdd){
       	$this->mabdd =& $bdd; 
     
    	$this->mabdd->req();
       }
    }
    Mon problème :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $bdd =& new bdd();
    $toto =& new toto($bdd);
     
    echo $bdd->nb;
    Je ne comprends pas pourquoi le résultat affiche "0" et non pas "1".
    (dans l'absolu, je voudrais que ça affiche "1")
    Si quelqu'un pouvait m'expliquer, ce serait très sympa.
    Merci.

    PS : je suis sous PHP 4

  2. #2
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    Salut

    N'oublie pas que PHP ne gère pas les pointeurs, seulement les références.
    Je ne suis pas moi-même un spécialiste en POO mais j'aurais fait ceci :
    Du fait de l'absence de pointeurs, je crains que tu sois obligé de procéder comme suit :
    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    <?php
     
    class bdd {
       var $nb;
     
       function bdd() {
          $this->nb = 0;
       }
     
       function req() {
          $this->nb ++;
       }
     
    }
     
    class toto{
     
       function toto(){
          global $bdd;
          $bdd->req();
       }
    }
     
    $bdd = new bdd();
    $toto = new toto($bdd);
     
    echo $bdd->nb;
     
    ?>
    Enfin, quitte à développer en POO avec PHP, je te conseille vivement d'y aller en PHP5 car le modèle objet a été entièrement refait.

  3. #3
    Membre chevronné
    Avatar de ska_root
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    1 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Août 2005
    Messages : 1 203
    Points : 1 839
    Points
    1 839
    Par défaut
    Salut,

    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
     
    <?php
     
    class bdd {
     
       var $nb;
     
       function bdd () {
          $this->nb = 0;
       }
     
       function req () {
          $this->nb++;
       }
     
    }
     
     
    class toto {
     
       function toto (& $bdd) {
     
          $this->mabdd=& $bdd;
          $this->mabdd->req ();
     
       }
     
    }
     
     
    $bdd=new bdd;
    $toto=new toto (& $bdd);
     
    echo $bdd->nb;
    ?>
    sinon, entièrement d'accord avec Kirkis, passes à php5 et oublies le problème de passage par référence...


  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2003
    Messages
    14
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 14
    Points : 15
    Points
    15
    Par défaut
    Merci beaucoup pour vos réponses et votre rapidité

    Juste pour ma culture personnelle, quelle est la différence entre une référence et un pointeur ?

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

Discussions similaires

  1. [XL-2013] Figer la date si la valeur de la cellule ne change pas
    Par christian_koffi dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 25/09/2014, 20h02
  2. [PHP 5.3] [POO] Comment afficher le nom de l'attribut et non pas sa valeur
    Par pierrot10 dans le forum Langage
    Réponses: 5
    Dernier message: 28/03/2010, 21h59
  3. [PHP 5.2] [POO] Afficher toutes les valeurs de mes attributs
    Par pierrot10 dans le forum Langage
    Réponses: 2
    Dernier message: 15/02/2010, 23h04
  4. Valeur de ComboBox qui ne change pas quand je clique
    Par pools dans le forum Windows Forms
    Réponses: 1
    Dernier message: 20/05/2009, 17h16
  5. Réponses: 2
    Dernier message: 11/11/2007, 16h49

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