Как проверить, установлена ли переменная объекта

У меня есть a User класс, который создается, когда пользователь входит в систему

$user = new User($userId);

Теперь, чтобы проверить, зарегистрирован ли пользователь, я пытался делать

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

} else {   // user is not logged in

}

Однако isset() кажется, не работает на объекты? И я также попробовал is_object(). Советуйте! Надо надеяться, существует способ сделать это изящно, возможно

if ($user->isLoggedIn()) {

}

Спасибо за внимание!

10
задан axsuul 16 February 2010 в 19:15
поделиться

4 ответа

isset () должен работать, возражать или нет. Вы также можете использовать

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

, чтобы проверить, установлен ли он и , является ли он объектом класса Пользователь .

11
ответ дан 3 December 2019 в 20:41
поделиться

Если вы отредактируете свой Класс пользователя, который вы можете использовать $ user-> isLoggedIn ()

class User {

private $logged_in = false;

...

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

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

...
}
2
ответ дан 3 December 2019 в 20:41
поделиться

isset() работает и с объектами. На самом деле она будет работать с чем угодно, если только:

  1. Переменная была объявлена в текущей области видимости
  2. Значение переменной отлично от NULL
1
ответ дан 3 December 2019 в 20:41
поделиться

Проблема в том, что

new User($userid);

всегда будет давать вам объект User , даже если он конструктор, который, вероятно, ищет $ userid в базе данных, может сделать вывод, что объект не существует. Вы можете создать исключение в конструкторе для недопустимых $ userid s и использовать конструкцию try / catch вместо isset () test или установите свойство User-> valid в конструкторе пользователей, которые действительно существуют, и проверьте это в своем тесте.

См. Также этот вопрос для получения дополнительных идей: Конструктор PHP для возврата NULL

4
ответ дан 3 December 2019 в 20:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: