PHP में == और === में अंतर: क्यों यह ज़रूरी है?

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

परिचय: वह जाल जिसमें हर नौसिखिया फंसता है

\n\n

एक स्थिति की कल्पना करें: आप अपनी पहली PHP स्क्रिप्ट लिख रहे हैं, जाँच रहे हैं कि उपयोगकर्ता ने सही पासवर्ड डाला है या नहीं, और आप शर्त लगाते हैं if ($password == "secret")। सब कुछ ठीक काम करता है। लेकिन एक महीने बाद आपको अजीब व्यवहार दिखता है: if (0 == "off") true लौटाता है, जबकि ये दो पूरी तरह से अलग चीज़ें हैं। हैरानी हुई?

\n\n

PHP तुलना ऑपरेटरों की दुनिया में आपका स्वागत है। यहाँ डबल इक्वल (==) और ट्रिपल इक्वल (===) सिर्फ अलग-अलग चिह्न नहीं हैं, बल्कि तुलना करने के दो बिल्कुल अलग तरीके हैं। अगर आप अंतर नहीं समझते, तो आपका कोड अप्रत्याशित व्यवहार कर सकता है, और बग वहाँ छिपे रहेंगे जहाँ आप उन्हें कम से कम उम्मीद करते हैं।

\n\n

इस लेख में हम जानेंगे:

\n
    \n
  • प्रत्येक ऑपरेटर 'अंदर से' कैसे काम करता है
  • \n
  • क्यों "123abc" == 123 true है, जबकि "123abc" === 123 false है
  • \n
  • कौन से जाल आपका इंतजार कर रहे हैं (चेतावनी: बहुत सारे हैं)
  • \n
  • वास्तविक प्रोजेक्ट्स में कब किस ऑपरेटर का उपयोग करें
  • \n
\n\n

तैयार हैं? चलिए शुरू करते हैं!

\n\n

1. मूल बातें: PHP में == और === क्या हैं?

\n\n

दोनों ऑपरेटर दो मानों की तुलना करने के लिए उपयोग होते हैं। लेकिन उनका तरीका मौलिक रूप से अलग है।

\n\n

समानता ऑपरेटर (==) — 'टाइप कन्वर्ज़न की अनुमति है'

\n

डबल इक्वल (या ढीली तुलना) पहले दोनों ऑपरेंड को एक ही प्रकार में बदलता है, फिर उनके मानों की तुलना करता है। अगर प्रकार अलग हैं, तो PHP स्वचालित रूप से उन्हें एक समान आधार पर लाता है। यह सुविधाजनक है, लेकिन खतरनाक भी।

\n\n

पहचान ऑपरेटर (===) — 'सब कुछ मेल खाना चाहिए'

\n

ट्रिपल इक्वल (या सख्त तुलना) मान और डेटा प्रकार दोनों की तुलना करता है। अगर प्रकार अलग हैं — तुरंत false, बिना किसी रूपांतरण के।

\n\n

याद रखने के लिए एक सरल तालिका:

\n
    \n
  • $a == $b — क्या प्रकार बदलने के बाद मान बराबर हैं?
  • \n
  • $a === $b — क्या मान बराबर हैं और प्रकार भी समान हैं?
  • \n
\n\n

2. सरल उदाहरण: संख्याएँ और स्ट्रिंग्स

\n\n

आइए एक क्लासिक मामला देखें — एक संख्या और एक स्ट्रिंग की तुलना।

\n\n
<?php\n$a = 5;      // integer\n$b = "5";   // string\n\n// ढीली तुलना (==)\nvar_dump($a == $b);  // bool(true) — PHP स्ट्रिंग "5" को संख्या 5 में बदल देता है\n\n// सख्त तुलना (===)\nvar_dump($a === $b); // bool(false) — प्रकार अलग हैं: integer बनाम string\n?>
\n\n

पहले मामले में, PHP सोचता है: 'अच्छा, एक संख्या और एक स्ट्रिंग। स्ट्रिंग "5" को आसानी से संख्या 5 में बदला जा सकता है, इसलिए ये बराबर हैं।' दूसरे मामले में: 'नहीं, integer, string नहीं है, तुरंत false'।

\n\n

यह एक छोटी सी बात लगती है, लेकिन यहीं से समस्याएँ शुरू होती हैं।

\n\n

3. मुख्य जाल: 'खालीपन' और 'शून्य'

\n\n

शुरुआती लोगों की सबसे आम गलती गलत मानों (falsy values) में उलझना है। PHP में कई ऐसे मान हैं जो ढीली तुलना में एक-दूसरे के बराबर माने जाते हैं, जबकि अर्थ में वे बिल्कुल अलग होते हैं।

\n\n

यह कोड देखें:

\n\n
<?php\nvar_dump(0 == false);  // bool(true)  — शून्य, false के बराबर है\nvar_dump(0 == null);   // bool(true)  — शून्य, null के बराबर है\nvar_dump(false == null); // bool(true)  — false, null के बराबर है\nvar_dump("" == false); // bool(true)  — खाली स्ट्रिंग, false के बराबर है\nvar_dump("" == 0);     // bool(true)  — खाली स्ट्रिंग, शून्य के बराबर है\n?>
\n\n

हैरानी हुई? बिल्कुल! 0 == false true है, "" == 0 भी true है। अगर आप जाँच रहे हैं कि उपयोगकर्ता ने पासवर्ड डाला है या नहीं और लिखते हैं if ($password == ""), फिर तुलना करते हैं if ($password == 0) से — दोनों शर्तें एक जैसी काम कर सकती हैं, जबकि ये अलग-अलग परिदृश्य हैं।

\n\n

अब ट्रिपल इक्वल से तुलना करें:

\n\n
<?php\nvar_dump(0 === false);  // bool(false)\nvar_dump(0 === null);   // bool(false)\nvar_dump("" === false); // bool(false)\nvar_dump("" === 0);     // bool(false)\n?>

ब्लॉग

पुस्तक अनुशंसाएँ