Я создаю страницу профиля для пользователя (точно так же, как в этом форуме).Создание профиля пользователя с помощью OOP PHP
У меня есть класс, как этот
class User
{
private $db;
private $name;
private $location;
private $email;
private $age;
private $photo;
function __construct($player_id, DB $db)
{
$this->db = $db;
$stm = $this->db->prepare_and_execute(
'SELECT * from users
where id = ?',
$_SESSION['user_id']
);
$result = $stm->fetch();
$this->email = $result['email'];
$stm = $this->db->prepare_and_execute(
'SELECT * from user_details
where user_id = ?',
$_SESSION['user_id']
);
$result = $stm->fetch();
$this->name = $result['name'];
$this->age = $result['age'];
$this->photo = $result['photo'];
}
public function get_player_name()
{
return $this->name;
}
public function get_player_location()
{
return $this->location;
}
public function get_player_age()
{
return $this->age;
}
// and so on...
}
В моей странице profile.php, где информация о пользователе, что отображается у меня есть что-то вроде этого:
<?php
$user = new User($_SESSION['user_id'], $db);
?>
<table id="info_table">
<tr>
<td class="td-align-top">Info</td>
<td class="td-align-top">
<table>
<tr><td>Location</td></tr>
<tr><td>Age</td></tr>
<?php if ($user->is_own_profile()) {
// check whether the user is viewing
//is his own profile or another user's profile ?>
<tr><td>Email</td></tr>
<?php } ?>
<tr><td>Organization</td></tr>
</table>
</td>
<td class="td-align-top">
<table>
<tr><td><?php echo $player->get_player_location(); ?></td></tr>
<tr><td><?php echo $player->get_player_age(); ?></td></tr>
<?php if ($user->is_own_profile()) { ?>
<tr><td><?php echo $player->get_player_email(); ?></td></tr>
<?php } ?>
<tr><td><?php echo $player->get_player_organization(); ?></td></tr>
</table>
</td>
</tr>
</table>
Так у меня есть 2 вопроса :
Как вы можете видеть, я использую функцию с именем is_own_profile(), чтобы проверить, является ли пользователь viewi его собственный профиль, или он находится в другом профиле пользователей и на основании результата этого условия я скрываю/показываю адрес электронной почты. Теперь, как вы можете себе представить, мне придется использовать одно и то же условие if-else, чтобы решить, показывать или скрыть много других вещей на странице, например, дату бит, параметр «Редактировать» и т. Д. Вместо того, чтобы иметь эти конструкции if-else на всей странице есть более чистый способ сделать это?
В начале страницы profile.php, я создаю объект пользователя и заполняю его некоторыми данными из db. Теперь, как я могу сделать этот объект доступным на других страницах, таких как уведомления, сообщения и т. Д. Вместо того, чтобы создавать и заполнять объект на каждой странице. Я рассмотрел возможность размещения объекта в сеансе, но после прохождения некоторых ответов на этом форуме я понял, что лучше избегать помещать слишком много данных в сеанс. Итак, каков наилучший способ приблизиться к этому?
Спасибо ..
Извините, но прежде чем искать наилучшие способы кэширования данных пользователя, я должен настаивать на том, чтобы вы смотрели на такие вещи, как SRP (принцип единой ответственности). При кэшировании этого объекта вы также будете кэшировать соединение с БД внутри. Это не отличная идея. –