Witam
Temat pewnie wam znany i stary jak swiat. Pisze sobie swoj cms starajac sie zrobic to obiektowo. Dotychczas przejrzalem i przeczytalem wiele artykulow dotyczacych OOP i robie sie coraz glupszy bo z tego co rozumie to zastosowan jest multum, tylko ktore to najlepsze. mam taka klase
include_once('db/db.php');
class User
{
private $user_id;
private $first_name;
private $last_name;
private $login;
private $password;
private $email;
private $ip;
private $user_role;
private $registration_date;
private $db;
function __construct()
{
$this->db = Database::getInstance();
}
function setLogin($login)
{
$this->login = $login;
}
function setPassword($password)
{
$this->password = $password;
}
function setFirstName($firstName)
{
$this->firstName = $firstName;
}
function setLastName($lastName)
{
$this->lastName = $lastName;
}
function setEmail($email)
{
$this->email = $email;
}
function setUserRole($role)
{
$this->role = $role;
}
function setRegistrationDate($registration_date)
{
$this->registration_date = $registration_date;
}
function login()
{
$action = $this->db->prepare("SELECT * from users WHERE login LIKE '$this->login'
AND password LIKE '$this->password'");
$action->execute();
$result = $action->fetchAll();
{
if($result[0]['Role'] == 0)
{
$_SESSION['user_id'] = $result[0]['user_id'];
return true;
}else if($result[0]['Role'] == 1)
{
$_SESSION['user_id'] = $result[0]['user_id'];
$_SESSION['admin'] = 'admin';
}
}
return false;
}
function register()
{
$ip = $_SERVER['REMOTE_ADDR'];
$action = $this->db->query( "INSERT into users(user_id , Login , Password , Name , LastName ,Email , Ip , Role , RegistrationDate)
VALUES('' , '$this->login' ,'$this->password' , '$this->firstName' , '$this->lastName' , '$this->email' , '$ip' ,
'$this->role' , NOW())");
$action->execute();
return true;
}
function EditUser()
{
...
}
function ChangePassword()
{
...
}
} // end of class.
?>
Pierwsze pytanie : Czy klasa User powinna miec funkcje takie jak Loguj, Rejestruj, Edytuj, Zmien Haslo i czy te funckje powinny miec juz "hardcoded" zapytania do bazy wewnatrz, patrz funckja loguj();. Wywoluje ja tak:
$user_c = new User();
$user_c->setLogin($_POST['login']);
$user_c->setPassword(md5($_POST['password'])); $login = $user_c->login();
Jezeli cos tego pokroju jest ok to spoko. Teraz np dopisalem sobie taka funkcje to tej samej klasy, ktora jak dla mnie moglaby byc w kazdej prawie innej klasie :
class User {
private $sqlObj;
private $SqltableRows;
function query($query)
{
$sql = $this->db->query($query);
$sql->execute();
$this->sqlObj= $sql->fetchAll(PDO::FETCH_OBJ);
$this->SqltableRows= $sql->fetch(PDO::FETCH_ASSOC);
}
}
Dzieki tej funkcji lapie sobie wszystko z bazy i w prosty sposob moge wywolywac wszystkie kolumny :
$user_c = new User();
$user_c->query("SELECT * FROM users");
$users = $user_c->getObj();
foreach ($users as $user)
{
}
Bardzo podoba mi sie mozliwosc poboru rekordow i nazw wierszy tabeli w tak prosty sposob. Teraz do rzeczy :
Funckja ta jest w Users ale generalnie moglaby byc w prawie kazdej innej klasie, np Products, Articles itp. Czy mam utworzyc osobna klase z ta funckja z ktorej jakos beda kozystac wszyskie inne klasy ? Czy ma byc to w klasie bazy danych, czy moze w jakies jeszcze innej ?
Prosze o odpowiedzi i wyrozumialosc
Ten post edytował rahul 20.08.2011, 20:50:56