Объявление объектов запроса в методах класса PHP
Я нахожусь в процессе построения системы объектно-ориентированных форм. Я собираю класс User, который содержит около восьми функций. Каждая функция содержит запрос MySQL, для которого должен быть создан объект класса Query.
Есть ли способ избежать необходимости объявлять новый объект каждый раз? Мне приходит в голову, что в какой-то момент сервер может зависнуть.
Роль класса User заключается в извлечении информации о пользователе из базы данных (имя, адрес электронной почты и т. Д.). Эти данные затем используются во всей системе, в том числе для аутентификации ролей. Вот класс User:
class User{
protected $user_id;
protected $session_hash;
protected $user_username;
protected $user_email;
protected $user_role_id;
protected $user_role_name;
protected $user_first_name;
protected $user_last_name;
public function __construct($user_id, $session_hash){
$this->user_id = $user_id;
$this->session_hash = $session_hash;
}
public function __get($name){
return $this->name;
}
public function __set($name, $value){
$this->$name = $value;
}
public function getLoggedUserInfo(){
global $db;
$query = new Query($db->link);
if($user_matches = $query->select("SELECT name, mail FROM ".TABLE_PREFIX.".d7_users WHERE uid = '".$this->user_id."'")){
$this->user_username = $user_matches[0]['name'];
$this->user_email = $user_matches[0]['mail'];
$this->user_role_id = $this->getLoggedUserRoleId($this->user_id);
$this->user_role_name = $this->getLoggedUserRoleName($this->user_role_id);
$this->user_first_name = $this->getLoggedUserFirstName($this->user_id);
$this->user_last_name = $this->getLoggedUserLastName($this->user_id);
$user_information_arr = array(
'user_id' => $this->user_id,
'user_username' => $this->user_username,
'user_first_name' => $this->user_first_name,
'user_last_name' => $this->user_last_name,
'user_email' => $this->user_email,
'user_role_id' => $this->user_role_id,
'user_role_name' => $this->user_role_name,
);
return $user_information_arr;
}
return false;
}
private function getLoggedUserRoleId($user_id){
global $db;
$query = new Query($db->link);
if($role_id_matches = $query->select("SELECT rid FROM ".TABLE_PREFIX.".d7_users_roles WHERE uid= '".$user_id."'")){
$this->user_role_id = $role_id_matches[0]['rid'];
return $this->user_role_id;
}
return false;
}
private function getLoggedUserRoleName($role_id){
global $db;
$query = new Query($db->link);
if($role_name_matches = $query->select("SELECT name FROM ".TABLE_PREFIX.".d7_role WHERE rid = '".$role_id."'")){
return $role_name_matches[0]['name'];
}
return false;
}
private function getLoggedUserFirstName($user_id){
global $db;
$query = new Query($db->link);
if($first_name_matches = $query->select("SELECT field_first_name_value FROM ".TABLE_PREFIX.".d7_field_revision_field_first_name WHERE entity_id='".$user_id."'")){
return $first_name_matches[0]['field_first_name_value'];
}
return false;
}
private function getLoggedUserLastName($user_id){
global $db;
$query = new Query($db->link);
if($last_name_matches = $query->select("SELECT field_last_name_value FROM ".TABLE_PREFIX.".d7_field_revision_field_last_name WHERE entity_id='".$user_id."'")){
return $last_name_matches[0]['field_last_name_value'];
}
return false;
}
}
1 ответ
Передайте объект запроса из существующего экземпляра в конструктор класса User.
protected $queryObject;
public function __construct($user_id, $session_hash, Query $query = NULL){
$this->user_id = $user_id;
$this->session_hash = $session_hash;
$this->queryObject = $query;
}