2012-01-30 12 views
5

मैं टाइप जुगलिंग और बूलियन पर PHP डॉक्स पढ़ रहा हूं लेकिन मुझे अभी भी समझ में नहीं आता कि यह तुलना सही क्यों है। मेरी [गलत] समझ मुझे बताती है कि में कथन, पूर्णांक 0 को FALSE और "ए" माना जाता है, एक गैर-खाली स्ट्रिंग होने पर TRUE माना जाता है। इसलिए, मुझे उम्मीद है कि यह तुलना FALSE == TRUE और अंत में, FALSE को हल करने के लिए की गई है। मुझे किस हिस्से में गलत मिला?तुलना ऑपरेटर - टाइप जॉगलिंग और बूलियन

<?php 
      if(0 == "a"){ 
        $result = "TRUE"; 
      }else{ 
        $result = "FALSE"; 
      } 

      //$result == "TRUE" 
    ?> 

http://codepad.viper-7.com/EjxBF5

उत्तर

9

जब पीएचपी एक स्ट्रिंग < => पूर्णांक तुलना करता है, यह एक बुद्धिमान रास्ते में एक नंबर करने के लिए स्ट्रिंग परिवर्तित करने के लिए प्रयास करता है। धारणा यह है कि यदि आपके पास स्ट्रिंग "42" है तो आप अन्य पूर्णांक में मान 42 की तुलना करना चाहते हैं। जब स्ट्रिंग संख्याओं से शुरू नहीं होती है, तो इसका मान शून्य है।

the docs से:

मूल्य स्ट्रिंग की प्रारंभिक भाग द्वारा दिया जाता है। यदि स्ट्रिंग वैध संख्यात्मक डेटा के साथ शुरू होती है, तो यह मान का उपयोग किया जाएगा। अन्यथा, मान 0 (शून्य) होगा।

यह व्यवहार comparison docs में भी अनुमानित है (पहले उदाहरण में पहली पंक्ति देखें)।

+0

मेरे प्रश्न का उत्तर देने और मेरी समझ में मदद करने के लिए धन्यवाद। – IsisCode

4

आपकी गलती यह है कि आप operator == मानते हैं कि उनके प्रत्येक ऑपरेशन को तुलना करने से पहले बूलियन के लिए coerces। ऐसा कोई काम नहीं है।

क्या होता है क्योंकि आप comparing an integer to a string हैं, इसलिए स्ट्रिंग को एक पूर्णांक में परिवर्तित किया जाता है (इस मामले में "a" converts to 0) और फिर तुलना 0 == 0 किया जाता है।

2

यदि आप == के बजाय सख्त तुलना === का उपयोग करते हैं तो यह काम करेगा। सख्त तुलना चर के प्रकार की भी जांच करती है, इसलिए 0 === 'a' गलत होगा।

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