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);
?>
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
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;
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