Hej alla!
Man är så himla tacksam över webForum, när det väl behövs trillar man in igen.. söker igenom det man förnärvarande nöter sina hjärnknölar på, och i nödläge lägger man upp en post.
Det är så att jag just nu bygger om en webbplats som jag tidigare konstruerat i efterhand och lagt till funktioner allteftersom. Tro mig - den koden har blivit så insane att inte ens NASA skulle förstå den :)
I samband med ombyggnaden har jag ju snappat upp ett och annat som har hänt på PHP "scenen" sen jag sist tog mig tid att uppdatera mig. Jag pratar självklart om PHP5 och införandet av högre stöd av OOP (objekt orienterad programmering, fint att man t.o.m. kan översätta förkortningen till svenska!) jämfört med PHP4.
Jag är i fullfärd med konstruktionen av min första klass, kallad User. Detta är uppbyggt av smärre kunskap sedan tidigare inom Java (har tokglömt allt från $this-> och konstruktorns egentliga betydelse hehe), samt av det man läst på sig runt om på webben gällande OOP i PHP;
<?php
class User {
public $id, $email, $firstname, $lastname;
private $phone, $ref;
protected $password;
public function __construct() {
}
private boolean function ctrlUser($email) {
$this->email = $email;
$this->sql = mysql_query("SELECT count(*) FROM users WHERE email = '".$this->email."'") or die(mysql_error());
if (mysql_result($this->sql, 0) > 0) {
return true;
}
else {
return false;
}
}
public function createUser($email, $password, $firstname, $lastname, $phone, $ref) {
//$db = new DB(); OPEN DATABASE - place in global
$this->email = $email;
$this->password = $password;
$this->firstname = $firstname;
$this->lastname = $lastname;
$this->phone = $phone;
$this->state = "created"; //extra
$this->admin = "0"; //extra
$this->ref = $ref; //extra
if ($this->ctrlUser($this->email)) {
$msg = "Användarnamnet/e-mail är redan använt. Ett mail har skickats till din angivna e-mailadress med dina inloggningsuppgifter samt status.";
return "<script Language='JavaScript'>location.href=('?msg=$msg');</script>";
}
else {
mysql_query("INSERT INTO users (email,password,firstname,lastname,phone,ref,state,admin,created) VALUES ('".$this->email."','".$this->password."','".$this->firstname."','".$this->lastname."','".$this->phone."','".$this->ref."','".$this->state."','".$this->admin."','".time()."')" or die(mysql_error());
}//else
}
public function editUser($id, $email, $password, $firstname, $lastname, $phone, $ref) {
$this->id = $id;
$this->email = $email;
$this->password = $password;
$this->firstname = $firstname;
$this->lastname = $lastname;
$this->phone = $phone;
$this->ref = $ref;
if ($this->ctrlUser($this->email)) {
mysql_query("UPDATE users SET email = '".$this->email."', password = '".$this->password."', firstname = '".$this->firstname."', lastname = '".$this->lastname."', phone = '".$this->phone."', ref = '".$this->ref."' WHERE id = '".$this->id."'") or die(mysql_error());
}
else {
//returnera error
}
}
public function removeUser() {
}
public function getAllUsers() {
}
}
?>
Jag har ännu inte provat denna kod, tänkte mest kolla ifall mitt tänk stämmer. Nu till en del av mina driljarder frågor:
- Har jag gjort rätt med att deklarera de olika variablerna i början? Kan jag komma åt en protected (som password) i alla funktioner inom klassen? Finns det överhuvudtaget ngt syfte att sätta variabeln till protected?
- Konstruktorn är i detta fall lämnad helt tom. Behöver då denna existera i koden? Bör jag sätta in alla variabler (dvs: $this->.. som finns i alla funktioner) i konstruktorn istället? Vill undvika att behöva slänga med alla variabler när man kör klassen, då inte alla behövs i alla funktioner. Eller MÅSTE jag deklarera alla variabler i konstruktorn?
- Är ctrlUser rätt tänkt, dvs. att jag satt den till boolean function samt att den returnerar det den ska?
- Går det bra att returnera det script jag har för att generera meddelandet på sidan?
- Måste jag alltid deklarera mysql_query med $this-> eller körs de som står "lösa" korrekt?
Sa ju att det skulle bli en del :)
Ytterst tacksam för all hjälp jag kan få! Kanske från en vass gammal kompis här som gillar att snurra? ;)
Tack på förhand!
/Andreas
[EDIT] Hade visst skrivit ett £ tecken istället för ett $ tecken.. London calling :) [/EDIT]