Partage
  • Partager sur Facebook
  • Partager sur Twitter

Petite question bete sur la POO : hydratation

Sujet résolu
    16 septembre 2019 à 12:53:13

    Bonjour à tous,

    Dans le cours sur la POO, on trouve la fonction hydrate()

    public function hydrate(array $donnees)
    {
      if (isset($donnees['id']))
      {
        $this->setId($donnees['id']);
      }
    
      if (isset($donnees['nom']))
      {
        $this->setNom($donnees['nom']);
      }
    }

    La fonction hydrate() est "fléxibilisée" à l'aide d'une boucle comme ci-dessous :

    public function hydrate(array $donnees)
    {
      foreach ($donnees as $key => $value)
      {
    
        $method = 'set'.ucfirst($key);
            
        if (method_exists($this, $method))
        {
           $this->$method($value);
        }
      }
    }
    

    J'ai compris le principe de l'écriture de cette nouvelle fonction, mais dans cette nouvelle fonction il n'y a plus de isset($donnees['?'])

    Je ne comprends pas pourquoi ce isset n'est plus utile.

    N'aurait-il pas fallu écrire ?

    public function hydrate(array $donnees)
    {
    	foreach($donnees as $key => $value)
    	{
    		$method = 'set'.ucfirst($key);
    		if (method_exists($this, $method))
    		{
    			$this->$method($value);
    			$a=$method($value);
    			if(isset($a))
    			{	
    				$this->$method($value);
    			}
    		}
    	}
    }

    Merci pour votre aide.



    • Partager sur Facebook
    • Partager sur Twitter
      16 septembre 2019 à 12:56:30

      Salut,

      le foreach parcours les index du tableau, et comme les index existent il n'appelle QUE les méthodes setX() des index existant

      -
      Edité par christouphe 16 septembre 2019 à 12:57:48

      • Partager sur Facebook
      • Partager sur Twitter
        16 septembre 2019 à 13:43:26

        Cela dit, les deux ne sont pas strictement équivalents : isset ne permet pas de set une valeur NULL (premier code) quand cette méthode hydrate (deuxième code), oui.

        > il n'appelle QUE les méthodes setX() des index existant

        Et qui ne valent pas NULL.

        J'imagine que c'est un peu là où voulait en venir l'OP par sa version de la méthode hydrate. A la différence près, que pour avoir une stricte équivalence, ce n'est pas la valeur retournée par le setter qu'il faut comparer à NULL mais $value (plus d'autres erreurs) :

        public function hydrate(array $donnees) {
            foreach($donnees as $key => $value) {
                $method = 'set'.ucfirst($key);
                if (!is_null($value) && method_exists($this, $method)) {
                    $this->$method($value);
                }
            }
        }
        

        De mon point de vue, c'est au setter de gérer la valeur NULL, ce ne devrait pas être à la méthode d'hydratation de faire ce choix [les écarter] donc la version qui vous est donnée (deuxième code) me paraît plus "correcte".

        PS : pour rappel, les noms des fonctions/méthodes étant insensibles à la casse en PHP, ucfirst n'est pas utile

        -
        Edité par julp 16 septembre 2019 à 14:38:19

        • Partager sur Facebook
        • Partager sur Twitter
          16 septembre 2019 à 14:55:54

          Super claire !

          Merci pour vos réponses.

          • Partager sur Facebook
          • Partager sur Twitter

          Petite question bete sur la POO : hydratation

          × 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