Partage
  • Partager sur Facebook
  • Partager sur Twitter

Incrementation attribut static à chaque instanciat

Sujet résolu
    1 décembre 2020 à 10:14:59

    Bonjour,

    J'aimerais utiliser un attribut static pour ma classe( l'ID ) qui s'incremente de 1 pour chaque instanciation de ma classe.

    Je pense faire le bon code mais cela ne marche pas.

    Merci d'avance pour votre aide. 

    <?php
    class Utilisateur{
    
      private static $nextID;
        private $idUtilisateur;
        private $mail;
        private $mdp;
        private $statut;
        private $nomUtilisateur;
        private $prenomUtilisateur;
    
        public function __construct($unMail, $unMdp, $unNomutilisateur, $unPrenomUtilisateur){
          self::$nextID++;
          $this->idUtilisateur = self::$nextID;
          $this->mail = $unMail;
          $this->mdp = $unMdp;
          $this->statut = "fonctionnaire";                
          $this->nomUtilisateur = $unNomutilisateur;
          $this->prenomUtilisateur = $unPrenomUtilisateur;
          
          
        }



    -
    Edité par JeanPhilippe28 1 décembre 2020 à 10:21:13

    • Partager sur Facebook
    • Partager sur Twitter
      1 décembre 2020 à 10:31:43

      Salut. ça fonctionne bien chez moi, j'ai mis $nextID en "public" pour tester

      <?php
      class Utilisateur{
       
        public static $nextID;
          private $idUtilisateur;
          private $mail;
          private $mdp;
          private $statut;
          private $nomUtilisateur;
          private $prenomUtilisateur;
       
          public function __construct($unMail, $unMdp, $unNomutilisateur, $unPrenomUtilisateur){
            self::$nextID++;
            $this->idUtilisateur = self::$nextID;
            $this->mail = $unMail;
            $this->mdp = $unMdp;
            $this->statut = "fonctionnaire";               
            $this->nomUtilisateur = $unNomutilisateur;
            $this->prenomUtilisateur = $unPrenomUtilisateur;
          }
      }
      
      new Utilisateur("", "", "", "");
      new Utilisateur("", "", "", "");
      new Utilisateur("", "", "", "");
      new Utilisateur("", "", "", "");
      new Utilisateur("", "", "", "");
      new Utilisateur("", "", "", "");
      
      print(Utilisateur::$nextID);
      
      
             
             



      • Partager sur Facebook
      • Partager sur Twitter
        1 décembre 2020 à 10:37:31

        kulturman a écrit:

        Salut. ça fonctionne bien chez moi, j'ai mis $nextID en "public" pour tester

        <?php
        class Utilisateur{
         
          public static $nextID;
            private $idUtilisateur;
            private $mail;
            private $mdp;
            private $statut;
            private $nomUtilisateur;
            private $prenomUtilisateur;
         
            public function __construct($unMail, $unMdp, $unNomutilisateur, $unPrenomUtilisateur){
              self::$nextID++;
              $this->idUtilisateur = self::$nextID;
              $this->mail = $unMail;
              $this->mdp = $unMdp;
              $this->statut = "fonctionnaire";               
              $this->nomUtilisateur = $unNomutilisateur;
              $this->prenomUtilisateur = $unPrenomUtilisateur;
            }
        }
        
        new Utilisateur("", "", "", "");
        new Utilisateur("", "", "", "");
        new Utilisateur("", "", "", "");
        new Utilisateur("", "", "", "");
        new Utilisateur("", "", "", "");
        new Utilisateur("", "", "", "");
        
        print(Utilisateur::$nextID);
        
        
               
               



        Bizarre, de mon côté l'ID reste bloqué à 1 quand je fais une deuxième instanciation. Ca doit venir de l'architecture de mon code. Parceque je suis en modèle MVC mon instanciation de classe ne se fait pas dans le même ficgier, ca peut venir de là ?

        <?php
        class Utilisateur{
          
          public static $nextID;
            private $idUtilisateur;
            private $mail;
            private $mdp;
            private $statut;
            private $nomUtilisateur;
            private $prenomUtilisateur;
          
            public function __construct($unMail, $unMdp, $unNomutilisateur, $unPrenomUtilisateur){
              self::$nextID++;
              $this->idUtilisateur = self::$nextID;
              $this->mail = $unMail;
              $this->mdp = $unMdp;
              $this->statut = "fonctionnaire";              
              $this->nomUtilisateur = $unNomutilisateur;
              $this->prenomUtilisateur = $unPrenomUtilisateur;
            }
        }
        
         
        
         if(isset($_POST['Submit']))
        {
        
        new Utilisateur("", "", "", "");
        
        print(Utilisateur::$nextID);
        }
        ?>
        <!DOCTYPE html>
        <html>
        <head>
        	
        	
        </head>
        <body>
        	<form method="post" action="submission.php">
            <input type="submit" name='Submit' value="Submit">
        </form>
        	
        	
        </body>
        </html>

        EDIT: personne pour m aider ?


        -
        Edité par JeanPhilippe28 1 décembre 2020 à 16:29:27

        • Partager sur Facebook
        • Partager sur Twitter
          1 décembre 2020 à 16:26:22

          Tu as exécuté le même code que j'ai posté?
          • Partager sur Facebook
          • Partager sur Twitter
            1 décembre 2020 à 16:28:26

            kulturman a écrit:

            Tu as exécuté le même code que j'ai posté?

            Je l'ai fait il marche mais regarde ce que je viens d envoyer ca ne marche pas comme ca 

            • Partager sur Facebook
            • Partager sur Twitter
              1 décembre 2020 à 16:36:34

              Ce n'est valable que dans le même contexte d'exécution, si tu recharges la page ce n'est plus valable et ça va reprendre de 0.
              • Partager sur Facebook
              • Partager sur Twitter
                1 décembre 2020 à 16:59:32

                kulturman a écrit:

                Ce n'est valable que dans le même contexte d'exécution, si tu recharges la page ce n'est plus valable et ça va reprendre de 0.

                Mais ducoup y a pas de solution ? Parce que moi dans mon cas faut que je crée un objet avec son propre ID d'où l attribut static et ce via un formulaire donc il y a forcement changement de page. :/

                Et pourquoi cela se reset à 0 ca ne devrait pas normalement...

                -
                Edité par JeanPhilippe28 1 décembre 2020 à 17:21:46

                • Partager sur Facebook
                • Partager sur Twitter
                  1 décembre 2020 à 19:48:21

                  Salut

                  Il y a une raison pour ne pas utiliser un ID en base de données qui soit auto-incrémenté ? Cela demande d'utiliser PDO::lastInsertId s'il faut récupérer la valeur courante de l'auto-incrément après insertion, mais c'est probablement plus fiable qu'un compteur côté code.

                  Alors oui, ça implique d'enregistrer les données en base, tout au moins d'en garder une trace ailleurs que juste dans le code qui, comme relevé, sera "remis à zéro" dès la fin de l'exécution.

                  -
                  Edité par Ymox 1 décembre 2020 à 19:49:58

                  • Partager sur Facebook
                  • Partager sur Twitter
                    2 décembre 2020 à 10:17:32

                    En effet, j'ai abandonné mon idée je vais laisser la bdd gérer l'id.
                    • Partager sur Facebook
                    • Partager sur Twitter

                    Incrementation attribut static à chaque instanciat

                    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                    • Editeur
                    • Markdown