Incrémentation / classe php

Le problème exposé dans ce sujet a été résolu.

Bonjour tout le monde,

Je suis entrain d’apprendre PHP, j’ai deux classes et je veux qu’à chaque fois que j’instancie une classe et que j’appelle la méthode "getNbVehicules()" que le nombre d’instances créées s’affichent. Le problème, c’est que cela ne semble pas fonctionner correctement, car il y a seulement "1" qui apparait quand j’appelle la méthode. Aidez-moi s’il vous plait.

<?php
	class Vehicule{
		private $marque;
		private $couleur;
		private $annee;
        private $nbVehicules;
		
		public function __construct($uneMarque,  $uneCouleur,  $uneAnnee){
			$this->marque=$uneMarque;
			$this->couleur=$uneCouleur;
			$this->annee=$uneAnnee;
            $this->nbVehicules=0;
		}
		
		public function getMarque(){
			return $this->marque;
		}
		
		public function getCouleur(){
			return $this->couleur;
		}
		
		public function getAnnee(){
			return $this->annee;
		}
        
		public function getNbVehicules(){
			return $this->nbVehicules+=1;
		}
		public function __toString(){
			$message = "";
			$message.= "Marque du vehicule: ".$this->marque." / Couleur du vehicule: ".$this->couleur." / Annee du vehicule: ".$this->annee;
			return $message;
		}
	}
    
    class Voiture extends Vehicule{
    	private $proprio;
        
        function __construct($uneMarque,  $uneCouleur,  $uneAnnee, $unProprio){
        	parent::__construct($uneMarque,  $uneCouleur,  $uneAnnee);
            $this->proprio=$unProprio;
        }
        
        function getProprio(){
        	return $this->proprio;
        }

    }
    $vehicule1 = new Vehicule("Nissan", "Bleu", 2021);
    echo "<p> Vehicule [".$vehicule1->getNbVehicules()."]</p>";
    echo $vehicule1->__toString();
    //
    $vehicule2 = new Voiture("Honda", "Rouge", 2020, "Jean");
    echo "<p> Vehicule [".$vehicule2->getNbVehicules()."]</p>";
    echo $vehicule2->__toString();
    echo " / Proprietaire: ".$vehicule2->getProprio();
    
?>

+0 -0

Il te faut un attribut de classe (déclaré static) et non d’instance.

  • private $nbVehicules; => private static $nbVehicules = 0;
  • supprimer $this->nbVehicules=0;
  • public function getNbVehicules(){ => public static function getNbVehicules(){
  • return $this->nbVehicules+=1; => return ++static::$nbVehicules; mais l’incrémentation devrait être réalisée dans le constructeur
  • $vehicule1->getNbVehicules() => Vehicule::getNbVehicules()
+1 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte