bonjour à tous,
Grace à Glaived qui m'a donner une excellent doc sur les class, j'ai pue commencer à m'y mettre, mais j'ai comme qui dirait loupé quelque chose.

J'essaie actuellement un truc simple, je vais chercher mes info en BD et j'aimerai me mettre en objet et l’appeler via vardump ou autre.

la construction démarre bien et les données sont correcte et existante, l'hydratation démarre aussi, mais ne semble ne pas tout faire, mais c'est peut être due à un blocage "normal" des echos.

Je ne peux pas lancer un setter manuellement

et lorsque j'appel un getter, j'ai n'ai pas de réaction et celà me retourne null si je fais

var_dump($moi->username);

ou

var_dump($moi);

ou

echo $moi->username;

Pourriez vous me dire ce qu'il ne va pas, aurai je loupé une page ou bien ...

Merci d'avance pour votre aide.

Flo

<?php 
/////activation protection page appelé/////
define('PROTECTIONINCLUDE', TRUE);
/////insertion des base de donnée/////
include ($_SERVER"DOCUMENT_ROOT"].'/v501/config/config.php');
class Membre
{   
    private $_id;
    private $_username;
    private $_user_lastpost_time;
    private $_user_last_privmsg;
    private $_user_email;
    public function __construct(array $data)
    {
        //var_dump($data); //vérification de la réception des données: ok!!
        $this->hydrate($data);
    }
    public function hydrate(array $data)
    {
        foreach ($data as $key => $value)
            {
                // On récupère le nom du setter correspondant à l'attribut.
                $method = 'set'.ucfirst($key);

                // Si le setter correspondant existe.
                if (method_exists($this, $method))
                    {
                        //echo "value: ".$value."<br>"; //vérification de l'exsitance de la valeur ok!!
                        // On appelle le setter.
                        $this->$method($value);
                    }
            }
    }
    //$test="123";
    //setId($test); //lancement manuel setters refusé erreur!!
    public function setId($id)
    {
        //echo "$id";//vérification lancement setters aucune réaction
        $this->_id = (int) $id;
    }
    public function setLastpost_time($lastpost_time)
    {
        $this->_lastpost_time = (int) $lastpost_time;
    }
    public function setLast_privmsg($last_privmsg)
    {
        $this->_last_privmsg = (int) $last_privmsg;
    }
    public function setUsername($username)
    {
        $this->_username = (int) $username;
    }
    public function setEmail($email)
    {
        $this->_email = (int) $email;
    }
    public function id()
    {
        return $this->_id;
    }
    public function email()
    {
        return $this->_email;
    }
    public function username()
    {
        echo "get: ".$this->_username; //vérification lancement getters aucune réaction
        return $this->_username;
    }

}
$request = $DBPDO2 ->query('SELECT user_id ,username ,user_lastpost_time , user_last_privmsg,user_email FROM phpbb_users WHERE user_email =" ****@****.***.fr"');
while ($data = $request->fetch(PDO::FETCH_ASSOC)) { $moi = new Membre($data);}

var_dump($moi->username);
 ?>

4 réponses


Glaived
Réponse acceptée

ligne 86 sur ton exemple
ce n'es pas

var_dump($moi->username);

mais

var_dump($moi->username());

on fait appel à un getter, on aurais pus faire appel à un attribue mais ceux ci sont en private

flo3376
Auteur

ok effectivement, le soucis était bien là, juste pour valider un truc, si je passe mes attribut en public, mes getters n'ont plus lieux d'exister, je me trompe?

en tous cas merci beaucoup

Bonjour, j'ai un peu de mal à comprendre, pourquoi une fonction Hydrate ?
Une bonne pratique est de faire des accesseurs (getters / setters ).
Au lieu de faire hydrate dans ton constructeur, donnes des valeurs à tes items, la methode la plus simple c'est de faire un pti:
$this->attribut = !empty($data'attribut']) ? $data'key'] : null;

flo3376
Auteur

je ne dis pas le contraire, le truc n'ayant fait jamais fais de programation orienté objet, pour le moment je suis bêtement les tutos, et ensuite j'évoluerai et je grandirai