2010-02-16 34 views
8

我有創建User類時如何驗證如果對象變量設置

$user = new User($userId); 

現在,用戶日誌來檢查用戶是否登錄,我試圖做

if (isset($user)) { // user is logged in 

} else { // user is not logged in 

} 

但是,isset()似乎不適用於對象?我也試過is_object()。請指教!希望有一種方法可以做到這一點,也許

if ($user->isLoggedIn()) { 

} 

謝謝你的時間!

回答

8

isset()應該工作,是否對象。您還可以使用

if ((isset($user)) and ($user instanceof User)) 

檢查是否設置無論是類User的對象。

1

如果您編輯的用戶類,你可以使用$用戶> isLoggedIn()

class User { 

private $logged_in = false; 

... 

public function login($uid) { 
    ... login code 
    $this->logged_in = true; 
} 

public function isLoggedIn() { 
    return $this->logged_in; 
} 

... 
} 
+0

不同,這是正確的答案被宣佈。如果你有一個用戶,並且想要檢查他是否已經登錄,那麼使用'isset($ user)'確定用戶是否登錄是一個非常糟糕的主意。 – MarthyM

4

的問題是,

new User($userid); 

總是給你一個User對象,即使它的構造函數可能會在數據庫中查找$userid,可能會斷定該對象不存在。您可以在構造函數中爲無效的$userid s拋出異常,並使用try/catch構造函數代替isset()測試,或者在確實存在的用戶的構造函數中設置User->valid屬性,並在您的測試中檢查該屬性。

也見一些更多的想法了這個問題:PHP constructor to return a NULL

1

isset()作品有對象了。事實上,它會與任何工作,只要:

  1. 變量已在當前範圍
  2. 變量值大於NULL