2010-02-16 6 views
8

tengo una clase User que se crea cuando un usuario inicia sesión enCómo comprobar si la variable de objeto se establece

$user = new User($userId); 

Ahora para comprobar si un usuario está conectado, he intentado hacer

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

} else { // user is not logged in 

} 

Sin embargo, isset() parece que no funciona para los objetos? Y también he intentado is_object(). ¡Por favor avise! Esperemos que haya una manera de hacerlo elegantemente, quizás

if ($user->isLoggedIn()) { 

} 

¡Gracias por su tiempo!

Respuesta

8

isset() debería funcionar, objetar o no. También puede utilizar

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

para comprobar si está ajustado y si se trata de un objeto de la clase User.

1

Si edita su clase de usuario se puede utilizar $ usuario-> 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

Esta es la respuesta correcta. Si tiene un usuario y quiere verificar si está conectado, es una mala idea usar 'isset ($ user)' para determinar si el usuario está conectado. – MarthyM

4

El problema es que

new User($userid); 

se siempre le dan un objeto User, aunque es constructor, que probablemente busca $userid en la base de datos, puede concluir que el objeto no existe. Puede lanzar una excepción en el constructor para $userid s no válido y utilizar un constructo try/catch en lugar de su prueba isset(), o establecer una propiedad User->valid en el constructor de usuarios que existen y verificar eso en su prueba.

Ver también esta pregunta para más ideas: PHP constructor to return a NULL

1

isset() obras con objetos también. De hecho, se trabajará con cualquier cosa, siempre y cuando:

  1. La variable ha sido declarada en el ámbito actual
  2. El valor de la variable es diferente de NULL
Cuestiones relacionadas