2010-08-08 15 views
53

मैं php docs पर पढ़ा है कि isset()property_exists() तुलना में तेजी से है और हम जैसेपरीक्षण करता है, तो संपत्ति मौजूद है

if (isset($this->fld) || property_exists($this, 'fld')) { 

दोनों का एक संयोजन का उपयोग करना चाहिए लेकिन मैं सिर्फ isset तो उपयोग नहीं कर सकते?

if (isset($this->fld)) { 

उत्तर

73

क्योंकि अगर इसकी भी वर्ग/वस्तु जहां के रूप में isset does not के एक परिभाषित संपत्ति है कि भेद करना property_exists आपको बता देंगे। उदाहरण के लिए:

class A { 
    protected $hello; 
} 

class B { 

} 

वर्ग एक में property_exists($this, 'hello') का उपयोग कर true वापस आ जाएगी, जबकि यह वर्ग बी में उपयोग कर false वापस आ जाएगी। issetदोनों उदाहरणों में वापस आएगा।

+1

अच्छा उत्तर +1 :-) – streetparade

5

यह इस बात पर निर्भर करता है कि आपका प्रोग्राम कैसा प्रदर्शन किया जाता है, लेकिन यदि आप मैन्युअल में टिप्पणियां पढ़ते हैं तो यह फ़ंक्शन की idiosyncrasies को समझाने में मदद करेगा।

http://php.timesoft.cc/manual/en/function.property-exists.php

महत्वपूर्ण हिस्सा यहाँ है:

प्रलेखन नए गुणों आप रन टाइम पर वस्तुओं को जोड़ने के की महत्वपूर्ण मामला बाहर छोड़ देता है। वास्तव में, property_exists यदि आप इस तरह के गुणों के बारे में पूछते हैं तो सत्य वापस आ जाएंगे।

+3

मैं संपत्ति खाली नहीं होने पर परीक्षण के लिए जारी करना भी पसंद करता हूं – streetparade

संबंधित मुद्दे