Gode råd til user-class
Jeg sidder lidt og fumler med at lave en "user-class" til mit community-site.Meningen med klassen er simpelthen at kunne håndtere en brugere - fx printe link til brugerens profile, slette brugeren osv.
Jeg vil gerne gøre koden renere alle de steder hvor brugere skal behandles.
Det jeg godt kunne tænke mig lidt "ekspert-input" til, er hvordan klassen skal opsamle oplysninger om brugeren.
Umiddelbart ville det være smart hvis man bare kunne skrive:
---------------------------------------
$user = new user($id); // henter user_id, username fra db
---------------------------------------
Men andre gange ville man måske ønske at hente mere end blot user_id og username fra db'en - måske også "birthday":
---------------------------------------
$user = new user($id, array("username", "birthday"));
---------------------------------------
... men nogle gange er det jo også hensigtsmæssigt at hente mange brugere i ét kald. I sådanne tilfælde kunne det måske se sådan ud:
---------------------------------------
$s = mysql_query("SELECT user_id, username, country_id, profile [...] WHERE group_id = '$group_id'");
while($r = mysql_fetch_assoc($s)) {
$user = new user($r['user_id'], array("username" => $r['username'], "country_id" => $r['country_id'], "profile" => $r['profile']); // *
print $user->getLink();
}
---------------------------------------
* = grunden til jeg ikke læsser hele $r-arrayet ind er, at det i nogle tilfælde, vil indeholde data fra andre tabeller hvis der i $s udføres et join på andre tabeller.
En klasse der opfylder ovenstående 3 indlæsningsmetoder kunne se sådan ud:
---------------------------------------
class user {
private $data;
function __contruct() {
$args = func_get_args();
if(is_numeric(key($args[1])) || sizeof(args) == 1) { // hvis $args[1] er et numerisk array så ...
$cols = (is_array($args[1])) ? implode(", ", $args[1]) : "username"
$s = mysql_query("SELECT ".$cols." FROM users WHERE user_id = '".$args[0]."'");
$data = mysql_fetch_assoc($s);
} else {
$data = $args[1];
}
$data['user_id'] = $args[0];
$this->data = $data;
}
public function getLink() {
return "<a href=\"profile.php?user_id=".$this->user_id."\">".$this->username."</a>";
}
[...]
}
---------------------------------------
Koden i dette indlæg er ikke testet, men håber i kan se hvad min intention er.
Da jeg er relativ ny i OOP og jeg har en fornemmelse af at jeg gør det hele lidt for avanceret for mig selv. Derfor spørger jeg jer: kan ovenstående løses på en nemmere eller mere struktureret måde? Findes der alternative måder at gøre tingene på, som er bedre? Kort sagt: er ovenstående en god måde at gøre tingene på?
Og så et lille tillægsspørgsmål: Jeg er lige blevet færdig med bogen http://www.bogpriser.dk/isbn-1593270771/?zone_name=ext - og jeg søger nu noget mere udfordrende læsestof omkring OOP gerne med udgangspunkt i PHP. Hvis du kan anbefale en god bog omhandlende dette emne, så ville jeg blive glad :o)
På forhånd tak,
Rasmus
