2012-05-29 15 views
6

क्या कोई ऑब्जेक्ट जांचने का एक छोटा तरीका है कि कोई ऑब्जेक्ट कक्षाओं के एक निश्चित समूह का हिस्सा है या नहीं? सबसे छोटा रास्ता instance of \Class1 || \Class2 || \Class3एकाधिक उदाहरण चेक

यह मानता है कि Class2 स्थिर है ..

+2

क्या इन कक्षाओं में कुछ समान है? शायद वे सभी एक ही इंटरफ़ेस को कार्यान्वित कर रहे हैं, और आप जांच सकते हैं कि आपका '$ obj' उस इंटरफ़ेस को लागू करता है या नहीं? –

+0

बहुत स्थानीयकृत? मुझे यह 5 साल बाद मिला और यह अभी भी उपयोगी है। –

उत्तर

1

मुझे लगता है,:

instanceof करता है तो बयान बहुत लंबा का उपयोग करना: if($obj instanceof \Class1 || $obj instanceof \Class2 || $obj instanceof \Class3....)

और यह काम नहीं करता है बूलियन अभिव्यक्ति को बाहरी विधि में रखना और इसे IF कथन में कॉल करना है।

7

संक्षेप में: नहीं

लंबा उत्तर: आप समाधान बना सकते हैं कि उपयोग get_parent_class() सभी माता पिता कक्षाओं लाने और फिर array_intersect() का उपयोग पता लगाने के लिए, एक या अपने वर्ग नामों में से अधिक वहाँ प्रकट होता है, तो करने के लिए पुनरावर्ती। हालांकि, ऐसा लगता है कि कक्षाओं में कुछ सामान्य होना चाहिए। इसे एक इंटरफ़ेस में इसके खिलाफ एक परीक्षण में रखें।

5

यदि बयान बहुत लंबी हो जाती

[...]

वहाँ एक छोटा रास्ता

निश्चित है।

सीधे शब्दों में एक समारोह बनाएँ:

function isOfValidClass($obj) 
{ 
    $classNames = array('Class1', 'Class2'); 
    foreach ($classNames as $className) { 
     if (is_a($obj, $className)) { 
     return true; 
    } 

    return false; 
} 

तो आप उपयोग कर सकते हैं जो आपके कोड में और नहीं अपने अगर बयान के बारे में चिंता करने के लिए "बहुत ज्यादा कमरा लेने" है (नहीं है कि आप कभी भी उस पर विचार करना चाहिए एक मुद्दा; वक्तव्य तब तक होना चाहिए जब तक उन्हें आवश्यकता हो)।

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