Staram przestawić się na myślenie OOP. Stworzyłem klasę, która odpowiedzialna będzie za dane zalogowanego użytkownika.
<?php class user extends DB{ protected $db; private $fetch_mode = PDO::FETCH_ASSOC; private $prefix, $tableName, $permissions, $logged = 0, $id, $login, $name, $function; public function __construct($prefix) { $this->db = parent::getInstance(); $this->prefix = $prefix; $this->tableName = $prefix.'users'; $sid = &$_COOKIE['sid_'.$this->prefix]; $sql = $this->db->prepare('SELECT * FROM '.$this->tableName.' WHERE sid=:sid'); $sql->bindValue(':sid', $sid, PDO::PARAM_STR); $sql->execute(); $row = $sql->fetch($this->fetch_mode); $sql->closeCursor(); if($row['id']){ $this->id = $row['id']; $this->login = $row['login']; $this->name = $row['name']; $this->function = $row['function']; $this->permissions = new userPermissions($this->prefix, $this->id); $this->logged = 1; } } } public function login($login, $password){...} public function logout(){...} public function getName(){ return $this->name; } public function getFunction(){ return $this->function; } public function getLogged(){ return $this->logged; } } ?>
Obiekt tej klasy będzie zawierał informacje o użytkowniku (jeśli jest on zalogowany). Dodatkowo zmienna $permission będzie obiektem klasy userPermission:
<?php class userPermissions extends DB{ protected $db; private $userId, $users, $portalContent, $categories, $tableName; private $fetch_mode = PDO::FETCH_ASSOC; public function __construct($prefix, $userId) { $this->db = parent::getInstance(); $this->tableName = $prefix.'user_functions'; $sql = $this->db->prepare('SELECT * FROM '.$this->tableName.' WHERE user_id=:id'); $sql->bindValue(':id', $userId, PDO::PARAM_INT); $sql->execute(); $row = $sql->fetch($this->fetch_mode); $this->editUsers = $row['edit_users']; $this->editCategories = $row['edit_categories']; $this->editPortalContent= $row['edit_portal_content']; } public function getUsers(){ return $this->editUsers; } public function getPortalContent(){ return $this->editPortalContent; } public function getCategories(){ return $this->editCategories; } } ?>
Jeżeli chcę sprawdzić czy user jest zalogowany $user->getLogged();
jeżeli chce sprawdzić czy ma prawa do edycji kategorii $user->permissions->getCategories();
I teraz mam 2 pytania.
1. Czy taka logika, jaką stworzyłem jest w ogóle racjonalna, czyli czy dobrze myślę jeżeli nie, to gdzie robię błędy?
2. PDO ma opcję zwrócenia wyniku jako obiekt. Czy da się automatycznie zapisać atrybuty zwróconego zapytania (czyli pola tabeli) do atrybutów danej klasy?
W chwili obecnej robię to tak:
<?php $this->editUsers = $row['edit_users']; $this->editCategories = $row['edit_categories']; $this->editPortalContent= $row['edit_portal_content']; ?>
Dziękuję serdecznie za wszelką pomoc, a także za opinie na temat samej klasy