簡體   English   中英

我應該如何設計和使用User類?

[英]How should I design and use an User class?

當我從事過程PHP編程時,我將擁有一個登錄頁面,用於創建和存儲用戶會話。 然后,在每個頁面上,我只顯示用戶名並檢索所需的信息。

但是我很無奈,您將如何在對象編程中實現這一目標?

因此,程序(login.php):

if ( $_POST['password'] != '' && $_POST['username'] != '' ) {
   // check if password&username combination exists in database etc.

   $_SESSION['user_id'] = $user_id;
   $_SESSION['username'] = $username;

}

我認為它將在OOP中這樣完成:

// include user class

if ( $_POST['password'] != '' && $_POST['username'] != '' ) {
   // check if password&username combination exists in database etc.

$user = new User();
$user->id = $userId;
$user->username = $username;

但這是問題所在:我在哪里創建會話? 而且該對象將不在此“ login.php”頁面之外,因為我在此處創建了它。 如何使這些信息隨處可見?

以及如何使用特殊的類(例如PDO)從數據庫中獲取信息而不將查詢放入用戶類中?

非常感謝,我只是無法理解結構

您將按照以下方式進行操作:

class User{

private $id;
private $username;

   function __construct($userId, $username) {
       $this->$id = $userId;
       $this->$username = $username;
   }

}

if ( $_POST['password'] != '' && $_POST['username'] != '' ) {
   // check if password&username combination exists in database etc.
   //......
   //Store your session
    $_SESSION['user_id'] = $user_id;
    $_SESSION['username'] = $username;
    //Create user instance
    $user = new User($user_id, $username ); 
}

您還可以將數據訪問層放在用戶構造函數中,這樣就只需要擔心存儲id會話。

user.php的:

class User{

private $id;
private $username, $first_name, $last_name;

   function __construct($userId) {
       $this->$id = $userId;
       //get user data from db using $id
       $this->$username = $row['username'];
       $this->$first_name = $row['first_name'];
       $this->$last_name = $row['last_name'];
   }

}

login.php中:

function get_userId($username, $password)
 // check if password&username combination exists in database etc.
 //then return Id
 //......   
return $userId
}

然后使用如下函數:

if ( $_POST['password'] != '' && $_POST['username'] != '' ) {
    $username = $_POST['username'];
    $password = $_POST['password'];
    $user_id = get_userId($username, $password);
    $_SESSION['user_id'] = $user_id;
}

那么您將使用ID創建用戶實例,如下所示:

session_start();
$user_id = $_SESSION['user_id']; 
$user = new User($user_id); 

試試這個你快到了

// include user class
session_start();

if ( $_POST['password'] != '' && $_POST['username'] != '' ) {
   // check if password&username combination exists in database etc.

$user = new User();
$user->id = $userId;
$user->username = $username;

$_SESSION['user_obj'] = serialize($user);

然后,當您想在另一個頁面中再次訪問它時:

// include user class
session_start();

$user = new User();
if ( isset( $_SESSION['user_obj'] ) {
    $user = unserialize($_SESSION['user_obj'];
}

首先,您需要使用官方文檔

就我的所有經驗而言,我可以告訴您,只有您自己決定如何使用類和OOP。 有許多模型和工藝可以給您一些結構,但這是個人選擇。

但是在您的情況下,我可以建議您使用常規類來檢查和存儲信息。

class User {
    private $id = null;
    private $username = null;
    private $isLoggedIn = false;
    public function __construct() {
        if (isset($_SESSION['userData']) && !empty($_SESSION['userData'])) { 
             // I want to think that you have more complex check for user session
             $this->id = $_SESSION['userData']['userId'];
             $this->username = $_SESSION['userData']['username'];
             $this->isLoggedIn = true;
        }
    }

    public function auth() {
        $_SESSION['userData'] = array()
        $result = false;
        // Here can be an password check
        if ($this->id && $this->username) { 
             $_SESSION['userData']['userId'] = $this->id;
             $_SESSION['userData']['username'] = $this->username ;
             $this->isLoggedIn = true;
             $result = true;
        }
        return $result;
    }
    public function isLoggedIn() {
        return $this->isLoggedIn;
    }

    public function userId($id = null) {
        if ($id != null) {
             $this->id = $id;
        }
        return $this->id;
    }

    public function userName($name = null) {
        if ($name != null) {
             $this->name = $name;
        }
        return $this->name;
    }

}

該課程的用法將簡短易懂

// include user class
session_start();
$user = new User();
if ($user->isLoggedIn()) {
    // user is Logged In
} elseif ( $_POST['password'] != '' && $_POST['username'] != '' ) { 
    // check if password&username combination exists in database etc.

    $user->userId($userId);
    $user->userName($username);
    $user->auth();
} else {
    echo 'Auth failed';
    die();
}
echo 'Hello, ' . $user->userName();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM