2012-07-31 7 views
12

in_array() ऑब्जेक्ट तुलना करें जहां यह जांचता है कि सभी विशेषताएं समान हैं? क्या होगा अगर $obj1 === $obj2, क्या यह इसके बजाय सूचक तुलना करेगा?ऑब्जेक्ट की ऑब्जेक्ट में कोई ऑब्जेक्ट है या नहीं, in_array कैसे जांचता है?

मैं एक ओआरएम का उपयोग कर रहा हूं, इसलिए यदि ऑब्जेक्ट तुलना करता है तो $obj1->getId() पहले से ही सरणी में परीक्षण कर रहा है। यदि नहीं, in_array अधिक संक्षिप्त है।

उत्तर

28

in_array()ढीला तुलना ($a == $b) करता है।

शब्दार्थ in_array($obj, $arr) इस के समान है:

foreach ($arr as &$member) { 
    if ($member == $obj) { 
    return TRUE; 
    } 
} 
return FALSE; 

... और in_array($obj, $arr, TRUE) इस के समान है:

foreach ($arr as &$member) { 
    if ($member === $obj) { 
    return TRUE; 
    } 
} 
return FALSE; 

... और क्या यह वास्तव में जाँच करता है पर manual उद्धृत करने के लिए:

तुलना ऑपरेटर (==) का उपयोग करते समय, ऑब्जेक्ट चर कॉम्पा एक साधारण तरीके से लाल, अर्थात्: दो वस्तु उदाहरण समान होते हैं यदि उनके पास समान गुण और मूल्य होते हैं, और समान वर्ग के उदाहरण होते हैं।

दूसरी ओर, पहचान ऑपरेटर (===) का उपयोग करते समय, ऑब्जेक्ट वेरिएबल्स समान हैं और केवल तभी यदि वे एक ही कक्षा के समान उदाहरण को संदर्भित करते हैं।

+1

बहुत बढ़िया, धन्यवाद। एक बेवकूफ टाइमर है, इसलिए मैं एक और 5 मिनट के लिए स्वीकार नहीं कर सकता। – yellottyellott

0

ऑब्जेक्ट्स हमेशा PHP 5+ में संदर्भ होते हैं और clone का उपयोग कर केवल प्रतिलिपि बनाई जा सकती है (इस प्रकार एक नई वस्तु बना सकती है)।

इसका मतलब है कि आप in_array() का उपयोग करने में सक्षम होना चाहिए। जब तक आप तीसरा तर्क है, जो मामले में यह सख्त तुलना करता है ($a === $b) को TRUE पारित