У меня есть 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()) {
}
Спасибо за внимание!
isset ()
должен работать, возражать или нет. Вы также можете использовать
if ((isset($user)) and ($user instanceof User))
, чтобы проверить, установлен ли он и , является ли он объектом класса Пользователь
.
Если вы отредактируете свой Класс пользователя, который вы можете использовать $ 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;
}
...
}
isset() работает и с объектами. На самом деле она будет работать с чем угодно, если только:
Проблема в том, что
new User($userid);
всегда будет давать вам объект User
, даже если он конструктор, который, вероятно, ищет $ userid
в базе данных, может сделать вывод, что объект не существует. Вы можете создать исключение в конструкторе для недопустимых $ userid
s и использовать конструкцию try
/ catch
вместо isset ()
test или установите свойство User-> valid
в конструкторе пользователей, которые действительно существуют, и проверьте это в своем тесте.
См. Также этот вопрос для получения дополнительных идей: Конструктор PHP для возврата NULL