Il faudrait que tu fasse une classe MemberLoader ou MemberHydrator qui ferais la requête et qui créerais l'objet Memberphp
Voici un exemple, avec 2 méthodes de récupération d'un membre, selon son id ou son username :
<?php
class MemberHydrator
{
/**
* Database connection instance
*
* @var PDO
*/
protected $conn;
/**
* MemberHydrator constructor.
*
* @param PDO $conn
*/
public function __construct(PDO $conn)
{
$this->conn = $conn;
}
/**
* Create a Member instance from database with it id
*
* @param string $id
*
* @return Member
*/
public function getFromId(string $id): Member
{
$datas = $this->conn->query(
'SELECT * FROM users WHERE id = :id',
['id' => $id]
)->fetch();
return static::hydrate($datas);
}
/**
* Create a Member instance from database with it username
*
* @param string $username
*
* @return Member
*/
public function getFromUsername(string $username): Member
{
$datas = $this->conn->query(
'SELECT * FROM users WHERE username = :username',
['username' => $username]
)->fetch();
return static::hydrate($datas);
}
/**
* Create a Member instance, and hydrate it from database query result
*
* @param array $datas
*
* @return Member
*/
static protected function hydrate(array $datas): Member
{
$member = new Member($datas['id'], $datas['username']);
$member->setEmail($datas['email']);
$member->setSurname($datas['surname']);
$member->setName($datas['name']);
$member->setSex($datas['sex']);
$member->setBirthdate(new Datetime($datas['birthdate']));
$member->setUserstart($datas['userstart']);
$member->setUserdate(new Datetime($datas['userdate']));
return $member;
}
}
Attention, c'est un exemple simpliste pour te donner une idée du découpage, mais à ne pas prendre telle quel, puisque je n'ai pas géré l'absence de retour de la requête, le catch des erreurs de création du membreC'est juste pour te donner une idée du découpage.
Après, au lieu d'avoir une classe Member et une classe MemberHydrator, tu pourrais jouer avec les namespace et avoir Entity\Member et Hydrator\Member