[英]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.