2010-02-16 12 views
8

मैं जबकैसे लगाएं कि वस्तु चर सेट कर दिया जाता

$user = new User($userId); 

अब में किसी उपयोगकर्ता के लॉग करता है, तो एक उपयोगकर्ता के प्रवेश की जांच करने के लिए एक User वर्ग जो बनाई गई है, मैं क्या कर की कोशिश की

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

} else { // user is not logged in 

} 

हालांकि, isset() वस्तुओं के लिए काम नहीं करता है? और मैंने is_object() भी कोशिश की है। कृपया सलाह दें! उम्मीद है कि यह सुंदर तरीके से करने का एक तरीका है, शायद

if ($user->isLoggedIn()) { 

} 

आपके समय के लिए धन्यवाद!

उत्तर

8

isset() काम करना, ऑब्जेक्ट करना चाहिए या नहीं। आप भी इसे और सेट कर दिया जाता है कि क्या यह वर्ग User का एक उद्देश्य है कि क्या जांच करने के लिए

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

उपयोग कर सकते हैं।

1

आप अपने उपयोगकर्ता वर्ग को संपादित करते हैं आप $ उपयोगकर्ता- उपयोग कर सकते हैं> 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

तुलना में अलग है यह सही जवाब है में घोषित किया गया है। यदि आपके पास कोई उपयोगकर्ता है और यह जांचना है कि वह लॉग इन है या नहीं, तो यह निर्धारित करने के लिए कि 'उपयोगकर्ता (लॉग इन) उपयोगकर्ता का लॉग इन करना वास्तव में एक बुरा विचार है। – MarthyM

4

समस्या यह है कि

new User($userid); 

हमेशा आप एक User वस्तु दे, भले ही है यह कन्स्ट्रक्टर है, जो शायद डेटाबेस में $userid देखता है, यह निष्कर्ष निकाल सकता है कि ऑब्जेक्ट मौजूद नहीं है। आप अमान्य $userid एस के लिए कन्स्ट्रक्टर में अपवाद फेंक सकते हैं और अपने isset() परीक्षण के बजाय try/catch निर्माण का उपयोग कर सकते हैं, या मौजूद उपयोगकर्ताओं के निर्माता में User->valid संपत्ति सेट कर सकते हैं और अपने परीक्षण में इसकी जांच कर सकते हैं। PHP constructor to return a NULL

1

isset() वस्तुओं भी साथ काम करता है:

भी कुछ और विचारों के लिए इस प्रश्न देखें। वास्तव में यह रूप में लंबे समय के लिए कुछ भी साथ काम करेंगे के रूप में:

  1. चर वर्तमान क्षेत्र
  2. चर Null मूल्य
संबंधित मुद्दे