2010-02-16 25 views
8

Ich habe eine User Klasse, die erstellt wird, wenn sich ein Benutzer anmeldetWie überprüfen, ob Objektvariable gesetzt ist

$user = new User($userId); 

nun zu prüfen, ob ein Benutzer angemeldet ist, habe ich versucht zu tun

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

} else { // user is not logged in 

} 

isset() scheint jedoch nicht für Objekte zu funktionieren? Und ich habe auch versucht is_object(). Bitte beraten! Hoffentlich gibt es eine Möglichkeit, dies elegant zu tun, vielleicht

if ($user->isLoggedIn()) { 

} 

Vielen Dank für Ihre Zeit!

Antwort

8

isset() sollte funktionieren, objekt oder nicht. Sie können auch

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

verwenden um zu überprüfen, ob es gesetzt und, ob es sich um ein Objekt der Klasse User ist.

1

Wenn Sie Ihre User-Klasse bearbeiten können Sie $ user-> verwenden 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

erklärt. Wenn Sie einen Benutzer haben und prüfen möchten, ob er eingeloggt ist, ist es eine sehr schlechte Idee, 'isset ($ user)' zu verwenden, um festzustellen, ob der Benutzer angemeldet ist. – MarthyM

4

Das Problem ist, dass

new User($userid); 

wird immer geben Ihnen einen User Objekt, obwohl Sein Konstruktor, der wahrscheinlich $userid in der Datenbank nachschlägt, kann zu dem Schluss kommen, dass das Objekt nicht existiert. Sie können eine Exception im Konstruktor für ungültige $userid s und verwenden Sie eine try/catch Konstrukt anstelle von isset() Test, oder legen Sie eine User->valid -Eigenschaft im Konstruktor von Benutzern, die vorhanden sind, und überprüfen Sie dies in Ihrem Test.

Siehe auch diese Frage für einige weitere Ideen: PHP constructor to return a NULL

1

isset() Arbeiten mit zu Objekten. In der Tat wird es mit etwas arbeiten, solange: Das ist die richtige Antwort

  1. Die Variable hat im aktuellen Bereich
  2. Der Variablenwert ist anders als NULL
Verwandte Themen