2010-02-16 23 views
8

Tôi có một lớp User được tạo ra khi người dùng đăng nhậpLàm thế nào để kiểm tra xem biến đối tượng được thiết lập

$user = new User($userId); 

Bây giờ để kiểm tra xem một người dùng đăng nhập vào, tôi cố gắng làm

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

} else { // user is not logged in 

} 

Tuy nhiên, isset() có vẻ như không hoạt động đối với các đối tượng? Và tôi cũng đã thử is_object(). Xin cho biết! Hy vọng rằng có một cách để làm điều này một cách thanh lịch, có lẽ

if ($user->isLoggedIn()) { 

} 

Cảm ơn bạn đã dành thời gian!

Trả lời

8

isset() nên hoạt động, phản đối hay không. Bạn cũng có thể sử dụng

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

để kiểm tra xem nó được thiết lập cho dù đó là một đối tượng của lớp User.

1

Nếu bạn chỉnh sửa lớp người dùng của bạn, bạn có thể sử dụng $ 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; 
} 

... 
} 
+0

Đây là câu trả lời đúng. Nếu bạn có một người dùng và muốn kiểm tra xem liệu anh ta có đăng nhập hay không, đó là một ý tưởng thực sự tồi khi sử dụng 'isset ($ user)' để xác định xem người dùng có đăng nhập hay không. – MarthyM

4

Vấn đề là

new User($userid); 

sẽ luôn cung cấp cho bạn một đối tượng User, mặc dù đó là hàm tạo, có thể tra cứu $userid trong cơ sở dữ liệu, có thể kết luận rằng đối tượng không tồn tại. Bạn có thể ném một ngoại lệ trong hàm khởi tạo cho không hợp lệ $userid và sử dụng cấu trúc try/catch thay vì thử nghiệm isset() hoặc đặt thuộc tính User->valid trong hàm tạo của người dùng tồn tại và kiểm tra điều đó trong thử nghiệm của bạn.

cũng Xem câu hỏi này cho một số ý tưởng hơn: PHP constructor to return a NULL

1

isset() tác với các đối tượng quá. Trong thực tế nó sẽ làm việc với bất cứ điều gì miễn là:

  1. Biến đã được khai báo trong phạm vi hiện tại
  2. Giá trị biến khác với NULL
Các vấn đề liên quan