Problème à l'hydratation données POO

Résolu
stupidon737 Messages postés 56 Date d'inscription   Statut Membre Dernière intervention   -  
stupidon737 Messages postés 56 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

Je debute en PHP.

J'ai un problème à l'hydratation de mes données avec les codes suivants (je commente) :

Ce fichier s'appelle Personnage.classes.php et il contient l'hydratation des données, les getters et les setters

<?php
class Personnage
{
    private $_id;
    private $_nom;
    private $_forcePerso;
    private $_degats;
    private $_niveau;
    private $_experience;

   // Hydratation des données une version trop longue
    public function hydrate(array $donnees)
    {
        if(isset($donnees['id']))
        {
            $this->setId($donnees['id']);
        }   
        if(isset($donnees['nom']))
        {
            $this->setNom($donnees['nom']);
        }
        if(isset($donnees['forcePerso']))
        {
            $this->setForcePerso($donnees['forcePerso']);
        }
        if(isset($donnees['degats']))
        {
            $this->setDegats($donnees['degats']);
        }
        if(isset($donnees['niveau']))
        {
            $this->setNiveau($donnees['niveau']);
        }
        if(isset($donnees['experience']))
        {
            $this->setExperience($donnees['experience']);
        }
    }
    
    
   /*     //Hydratation dynamique
    
    public function hydrate(array $donnees)
    {
        foreach($donnees AS $key => $value)
        {
            //On recupere dynamiquement le setter correspondant à l'attribut'
            $method = 'set'.ucfirst($key);
            
            //Si le setter correspondant existe :
            if(method_exists($this,$method))
            {
                //on appelle le setter
                $this->$method($value);
            }
            
        }
    }*/

    
    //Liste des getters
    
    public function id()
    {
        return $this->_id;
    }
    
    public function nom()
    {
        return $this->_nom;
    }
    
    public function forcePerso()
    {
        return $this->_forcePerso;
    }
    
    public function degats()
    {
        return $this->_degats;
    }
    
    public function niveau()
    {
        return $this->_niveau;
    }
    
    public function experience()
    {
        return $this->_experience;
    }
    
 
    //Liste des setters
    
    public function setId($id)
    {
        $id = (int) $id;
        
        if($id> 0)
        {
            $this->_id = $id;
        }
    }
    
    public function setNom($nom)
    {
        if (is_string($nom))
        {
            $this->_nom = $nom;
        }
    }
    
    public function setForcePerso($forcePerso)
    {
        $forcePerso = (int) $forcePerso;
        
        if($forcePerso >=1 && $forcePerso<=100)
        {
            $this->_forcePerso = $forcePerso;
        }
    }
    
    public function setDegats($degats)
    {
        $degats = (int) $degats;
        
        if($degats>=0 && $degats<=100)
        {
            $this->_degats = $degats;
        }
    }
    
    public function setNiveau($niveau)
    {
        $niveau = (int) $niveau;
        
        if ($niveau>=1 && $niveau<=100)
        {
            $this->_niveau = $niveau;
        }
    }
    
    public function setExperience($experience)
    {
        $experience = (int) $experience;
        
        if ($experience>=1 && $experience<=100)
        {
            $this->_experience = $experience;
        }
    }
    
    
}
?>


Un fichier de connexion : connexion.php

<?php

try{
    $db = new PDO("mysql:host=localhost;dbname=poo","root","");
    $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
catch(exception $e)
{
    die('Erreur :'. $e->getMessage());
}


?>


et un fichier qui recupere les fichiers dans la base de données : info_personnage.php

<?php


require('connexion.php');

//Ce code charge dynamiquement les classes se trouvant dans le repertoire classe.
function chargerClasse($classe)
{
    require 'classes/'.$classe.'.classes.php';
}

spl_autoload_register('chargerClasse');


$request = $db->query('SELECT id, nom, forcePerso, degats, niveau, experience FROM personnages');



while ($donnees = $request->fetch(PDO::FETCH_ASSOC))
{
    $perso = new Personnage($donnees);
    
    echo  $perso->nom(), ' a ', $perso->forcePerso(), ' de force, ', $perso->degats(), ' de degats ', $perso->experience(),
     ' d\'experience et au niveau de ', $perso->niveau(), '<br/>';
    
}


?>



et ces codes me donnent :
a de force, de degats d'experience et au niveau de
a de force, de degats d'experience et au niveau de
a de force, de degats d'experience et au niveau de
a de force, de degats d'experience et au niveau de
a de force, de degats d'experience et au niveau de
a de force, de degats d'experience et au niveau de
a de force, de degats d'experience et au niveau de

Le nombre de ces lignes etant le nombre d'entrées dans ma base de données donc la connexion est ok.

J'ai commenté les hydratations et rien de changer. Donc je pense que c'est au niveau de l'hydratation qui pose problème. Ai-je lui mal placé dans mon code ?

Merci pour votre aide.
A voir également:

1 réponse

stupidon737 Messages postés 56 Date d'inscription   Statut Membre Dernière intervention   3
 
Donc, il me manquait une methode __construct
0