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']); $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
