Partage
  • Partager sur Facebook
  • Partager sur Twitter

accéder à l'attribut d'une class dans une fonction

    23 janvier 2020 à 12:37:53

    Bonjour,

    j'ai une class voiture, et j'essaye dans une class garage d'accéder via la fonction most aux attribut de voiture, via paramètre. C'est pas très clair désolé, mais en gros c'est la ligne "$mostDonnée = $element->$donnée;" qui me pose problème. Je sais que'elle n'est pas correcte mais c'est montrer ce que je veux faire !

    Si quelqu'un veut bien m'aider ce serait cool :)

    class voiture{
        public $marque;
        public $motorisation;
        public $modèle;
        public $yearCirculation;
        public $kilometrage;
        public $prix;
    
        public function __construct(
        string $marque,
        string $motorisation,
        string $modèle,
        int $yearCirculation,
        float $kilometrage,
        float $prix
        ){
          $this->marque = $marque;
          $this->motorisation = $motorisation;
          $this->modèle = $modèle;
          $this->yearCirculation = $yearCirculation;
          $this->kilometrage = $kilometrage;
          $this->prix = $prix;
        }
    
      }
    public function most($donnée, $attribut)
        {
    
          $mostDonnée = -999999;
          foreach($this->cars as $element){
            if ($element->$donnée > $mostDonnée){
              $mostDonnée = $element->$donnée;
              $mostDonnéeCar = $element;
            }
          }
          $attribut = $mostDonnéeCar;
        }




    • Partager sur Facebook
    • Partager sur Twitter
      23 janvier 2020 à 12:42:25

      Je te conseil avant de continuer dans la POO de revoir 2 3 truc en php :

      • Ton indentation qui à l'air vraiment wtf
      • Le nom de tes variable qui ont des accents

      Ensuite faut aussi voir pour la poo la partie visibilité qui apprends à utiliser private pour les propriétés d'une classe.

      PS: Voici la norme de php qu'il faut suivre : https://www.php-fig.org/psr/psr-1/ et https://www.php-fig.org/psr/psr-12/

      -
      Edité par quenti77 23 janvier 2020 à 12:45:01

      • Partager sur Facebook
      • Partager sur Twitter
        23 janvier 2020 à 12:49:14

        y a quoi de wtf ?

        Et yes les accents je corrige ça.

        Mais du coup pour ma question ? 

        • Partager sur Facebook
        • Partager sur Twitter
          23 janvier 2020 à 12:55:01

          Pour ta question en fait il faut utiliser de l'accès dynamique (comme tu as fait d'aileurs dans ton code après relecture) mais pour le coup je ne vois pas l'intérêt de ta méthode most. En tout cas voici comment c'est en essayant d'être plus "propre" :

          <?php
          
          class Car
          {
              private $mark;
              private $model;
          
              public function __construct(string $mark, string $model)
              {
                  $this->mark = $mark;
                  $this->model = $model;
              }
          
              public function getMark(): string
              {
                  return $this->mark;
              }
          
              public function setMark(string $mark): void
              {
                  $this->mark = $mark;
              }
          
              public function getModel(): string
              {
                  return $this->model;
              }
          
              public function setModel(string $model): void
              {
                  $this->model = $model;
              }
          }
          
          class Garage
          {
              /** @var Car[] $cars */
              private $cars = [];
          
              public function add(Car $car): void
              {
                  $this->cars[] = $car;
              }
          
              public function most($data, $attribute): void
              {
                  $setter = 'set'.ucfirst($attribute);
                  foreach ($this->cars as $car) {
                      if (method_exists($car, $setter)) {
                          $car->{$setter}($data);
                      }
                  }
              }
          }
          


          J'utilise les  nouveautés de php 7 vu que de toute façon on est sensé être en php version 7.2 minimum :)

          -
          Edité par quenti77 23 janvier 2020 à 12:56:46

          • Partager sur Facebook
          • Partager sur Twitter
            23 janvier 2020 à 13:11:42

            En faite j'ai pas mis ma class garage entière, le truc c'est que je dois trouver, la voiture qui a le plus grand prix, année de mise en circularisation etc... du coup au lieu de faire 5-6 fonction semblables je préfère en faire une ^^

            Merci en tout cas je check ça 

            modif : 

            Bon j'ai regardé vite fais mais j'ai pas trop compris ce que t'as voulu faire, en gros je veux une méthode qui fait comme celle là, mais avec un paramètre à la place de "kilometrage":

            public function mostKilometrage() : void
                {
                  $mostK = 0;
                  foreach($this->cars as $car){
                    if ($car->kilometrage > $mostkilometrage){
                      $mostkilometrage = $car->kilometrage;
                      $mostkilometrageCar = $element;
                    }
                  }
                  $this->mostkilometrage = $mostkilometrageCar;
                }

             mas j'arrive pas à intégré ma variable $data après $car->

            -
            Edité par Elfepee8031 23 janvier 2020 à 13:40:56

            • Partager sur Facebook
            • Partager sur Twitter

            accéder à l'attribut d'une class dans une fonction

            × 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