In order to avoid having to query the DB for each member in the group, I might want to give the Member class a method to populate it directly:
<?php
class Member
{
private $data = array(
'id' => null,
'name' => null,
'password' => null // and so forth...
);
public function populate($data)
{
if(!is_array($data))
{
throw new Exception("Not an array");
}
foreach($data as $key => $val)
{
if(array_key_exists($key, $this->data))
{
$this->data[$key] = $val;
}
else
{
throw new Exception("Invalid key '$key'");
}
}
return true;
}
// other methods, including populating via DB query on member ID when preferred . . .
}
class MemberGroup
{
private $members = array(); // array of Member objects
private $db; // whatever database interface you want to use
public function __construct($db)
{
$this->db = $db;
}
public function populateGroup($groupID)
{
$groupID = (int) $groupID;
$sql = "
SELECT member.*
FROM member
INNER JOIN member_group ON member.id = member_group.member_id
WHERE member_group.group_id = $groupID
";
$result = $db->query($sql);
while($row = $result->fetch_assoc())
{
$member[$row['id']] = new Member();
$member[$row['id']]->populate($row);
}
}
}