0

我正在为用户创建个人资料页面(就像本论坛中的那样)。

我有这样的课

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>

所以我有两个问题:

  1. 如您所见,我正在使用一个名为 is_own_profile() 的函数来检查用户是在查看自己的个人资料还是在其他用户的个人资料上,并且根据该条件的结果,我正在隐藏/显示电子邮件地址。现在您可以想象我将不得不使用相同的 if-else 条件来决定是否在页面上显示或隐藏许多其他内容,例如 bith 日期、编辑选项等。所以而不是使用这个 if-else 构造整个页面是否有更清洁的方法来做到这一点?

  2. 在 profile.php 页面的开头,我正在创建一个用户对象并使用数据库中的一些数据填充它。现在我怎样才能使这个对象在通知、消息等其他页面中可用,而不是在每个页面上实例化和填充对象。我曾考虑将对象放入会话中,但在本论坛中浏览了一些答案后,我意识到最好避免在会话中放入太多数据。那么解决这个问题的最佳方法是什么?

谢谢..

4

1 回答 1

3

如果您不想将其保存在会话中,您可以制作一个包含文件并在那里进行实例化。这样,如果您需要在每个页面上做任何其他事情,您所要做的就是将其添加到那里。

此外,对于您的 if-else 事情,您可以执行以下操作:

$player->show_own('email', '<tr><td>', '</td></tr>');

get_player_email看起来像这样的地方:

public function show_own($prop, $before = '', $after = '')
{
    if ( $this->is_own_profile() ) {
        return $before . $this->$prop . $after;  
    }
    return '';
}

然后,您也可以将该方法重用于其他属性。

于 2013-07-06T16:41:18.727 回答