"! ==" और "==!" के बीच अंतर [बन्द है]


162

कल जब मैंने किसी और के द्वारा लिखे गए PHP कोड को संशोधित किया तो मैं इस पर लड़खड़ा गया। मैं चकित था कि एक साधारण तुलना ( if ($var ==! " ")) उम्मीद के मुताबिक काम नहीं कर रही थी। कुछ परीक्षण के बाद मुझे एहसास हुआ कि जिसने भी उस कोड का उपयोग तुलना ऑपरेटर के ==!बजाय किया था !==। मैंने कभी ==!किसी भाषा में नहीं देखा है इसलिए मुझे आश्चर्य है कि यह कोड कैसे काम कर सकता है और कुछ परीक्षण किया है:

<?php
echo "int\n";
echo "1 !== 0: "; var_dump(1 !== 0);
echo "1 !== 1: "; var_dump(1 !== 1);
echo "1 ==! 0: "; var_dump(1 ==! 0);
echo "1 ==! 1: "; var_dump(1 ==! 1);
echo "bool\n";
echo "true !== false: "; var_dump(true !== false);
echo "true !== true: "; var_dump(true !== true);
echo "true ==! false: "; var_dump(true ==! false);
echo "true ==! true: "; var_dump(true ==! true);
echo "string\n";
echo '"a" !== " ": '; var_dump("a" !== " ");
echo '"a" !== "a": '; var_dump("a" !== "a");
echo '"a" ==! " ": '; var_dump("a" ==! " ");
echo '"a" ==! "a": '; var_dump("a" ==! "a");
?>

यह इस उत्पादन का उत्पादन करता है:

int
1 !== 0: bool(true)
1 !== 1: bool(false)
1 ==! 0: bool(true)
1 ==! 1: bool(false)
bool
true !== false: bool(true)
true !== true: bool(false)
true ==! false: bool(true)
true ==! true: bool(false)
string
"a" !== " ": bool(true)
"a" !== "a": bool(false)
"a" ==! " ": bool(false)
"a" ==! "a": bool(false)

ऑपरेटर बूलियन और पूर्णांक चर के लिए काम करता है, लेकिन तार के लिए नहीं। मैं ==!किसी भी खोज इंजन पर PHP प्रलेखन या इसके बारे में कुछ भी नहीं पा सकता हूं (Google, Bing, DuckDuckGo की कोशिश की, लेकिन मुझे संदेह है कि वे शाब्दिक स्ट्रिंग की खोज करने के बजाय इसे व्याख्या करने की कोशिश करते हैं)। क्या किसी ने इसे पहले देखा है और इस व्यवहार पर कोई प्रकाश डाल सकता है?


57
चलो ... क्या उतार चढ़ाव के साथ है? मैं इस तरह के एक दर्जन से अधिक प्रश्न कर सकता हूं। और अर्ध विवेकी विश्लेषण द्वारा उनका साथ देते हैं। यह मानक पाठ्यपुस्तक अभ्यास अभ्यास है, नहीं। एसओ में, हम गुणवत्ता और जानकारी के लिए वोट करते हैं, न कि मनोरंजन और मनोरंजन के लिए।
सेह

51
@ वह आगे बढ़ रहा है क्योंकि इसकी एक अच्छी तरह से शोध किए गए प्रश्न की परिभाषा है - उसने "एक उत्तर के लिए पूरी तरह से खोज की है", "विशिष्ट", प्रश्न "दूसरों के लिए प्रासंगिक" है, और "विषय पर" है। ओपी ने चीजों की कोशिश की है और हमें दिखाया है कि उन्होंने क्या कोशिश की है; इस तरह का सवाल इस साइट को बढ़ावा देने की कोशिश करता है
JRaymond

11
@JRaymond: वह परेशान हो रहा है क्योंकि समस्या और उत्तर को समझना बहुत आसान है। सामान्य ज्ञान पहलू में जिज्ञासा बढ़ जाती है जो अधिक लोगों को प्रेरित करती है, और आसान पहलू उन लोगों के प्रतिशत को बढ़ाता है जो इस सवाल और जवाब को समझने के लिए पर्याप्त हैं। यह एक अच्छा सवाल है या नहीं इससे संबंधित नहीं है।
थॉमस बोनीनी

4
@JRaymond, इसे स्वीकार, उच्च ऊपर वोट सवालों के अधिकांश हैं सामान्य ज्ञान। कई अन्य लोगों के बीच मेरे इन तीन सवालों पर एक नज़र डालें: 1 , 2 , 3 । उनमें से कोई भी ऐसी चीज नहीं है जिसे आप केवल Google पर पा सकते हैं (अधिकांश उच्च-मतदान प्रश्नों के विपरीत) और वे अच्छी तरह से सोचे गए हैं और लिखे जाने से पहले कोशिश की गई है (मुझे पता है, क्योंकि मैंने उन्हें लिखा था)। हालांकि, चूंकि वे ऐसे प्रश्न हैं जिनके लिए विशेषज्ञता की आवश्यकता होती है, इसलिए उन्हें कभी उच्च वोट नहीं मिलते हैं। बस यहीं सिस्टम काम करता है।
शाहबाज

3
@JRaymond sehe सही है। राइटर्स को SO पर फील्ड-डे होता। मैं इस सूची ( php.net/quickref.php ) को नीचे जाने और दिलचस्प समस्याओं के साथ आने का सुझाव दूंगा जहां फ़ंक्शन समाधान है। अधिक अस्पष्ट और दिलचस्प स्थिति या अधिक वोट कार्य करते हैं।
माइक बी।

जवाबों:


243

अंतर यह है कि कोई ऑपरेटर नहीं है ==!

यह अभिव्यक्ति:

$a ==! $b

मूल रूप से इस के रूप में ही है:

$a == (!$b)

10
वाह, इतने कम समय में बहुत अच्छा जवाब। मैंने पहला उत्तर उठाया जिसने स्पष्ट किया कि! दाएं हाथ के चर पर लागू होता है और इसलिए इसका सबसे अधिक मूल्य है। अन्य लोगों के लिए क्षमा करें;)
गेराल्ड श्नाइडर

4
@ गेराल्ड श्नाइडर: कम से कम आप इसे बनाने के लिए कर सकते थे इस उत्तर को बेहतर बनाने के लिए ताकि यह कम से कम व्याकरण और स्वरूपण के संदर्भ में अन्य उत्तरों के बराबर था (जिनमें से एक आपने विशेष रूप से इसकी विस्तृत व्याख्या के लिए बुलाया था) !)। लेकिन कोई बात नहीं, मैंने इसे अभी संपादित किया है।
BoltClock

मैं PHP में भी कार्यक्रम नहीं करता और यहां तक ​​कि मुझे एहसास हुआ कि "==!" 2 ऑपरेटरों "==" और "!" के रूप में पढ़ा जाएगा। यह सिर्फ दिखाता है कि लेआउट का थोड़ा बहुत प्रभाव आप पर कैसे पढ़ सकते हैं।
StarNamer

2
@ बंग दाओ उम, जावास्क्रिप्ट? इसमें === और = == है। लेकिन नहीं ==!
psr

2
@BangDao अब जबकि आपने के लिए एक और कारण w3fools कृपया इसे पढ़ें, यह महत्वपूर्ण है।
कुछ

77

==!PHP में कोई ऑपरेटर नहीं है

इसका सिर्फ का एक संयोजन ==और !। केवल प्रासंगिक ऑपरेटर यहां मौजूद है ==। तो संयोजन ==!सिर्फ एक सामान्य ==, जाँच Equality, और मुझ पर भरोसा करने के रूप में काम करेगा ,

$variable_a ==! $variable_b 

इसके अलावा कोई नहीं है

$variable_a == (!$variable_b)

और इस तरह;

"a" ==! " ": bool(false)
"a" ==! "a": bool(false) //is same as "a" == (!"a")

तथा

true ==! false: bool(true)
true ==! true: bool(false)

कई ऑपरेटरों के पात्रों को मिलाकर एक ऑपरेटर के रूप में हमेशा काम नहीं किया जा सकता है। उदाहरण के लिए, यदि हम लेते हैं =और !, यह केवल परिचालकों के रूप में काम करेगा यदि यह !=या के पैटर्न में है !==। इन वर्णों के लिए कई संयोजन हो सकते हैं !====, !==!आदि। आदि ।। संचालक संयोजन अद्वितीय प्रारूप , अद्वितीय क्रम , अद्वितीय संयोजन (सभी वर्ण सभी अन्य वर्णों के साथ गठबंधन नहीं होना चाहिए ) और निश्चित रूप से, उनके बीच किसी भी स्थान के बिना होना चाहिए

नीचे दी गई ऑपरेटरों की सूची देखें;

यहां छवि विवरण दर्ज करें


2
मैं एक का उपयोग करने में सक्षम होने के उसी भ्रम के तहत गिर गया <table>
चाड हैरिसन

+ लगभग सोचा कि एक मेज थी ... लेकिन इसकी वास्तव में एक छवि थी
बाबा

38

==! एक ऑपरेटर नहीं है, लेकिन दो:

== तथा !

! से उच्च प्राथमिकता है ==

इसलिए :

"a" !== " ": bool(true) -> सच है क्योंकि "ए" वास्तव में "" के बराबर नहीं है

"a" ==! " ": bool(false) -> असत्य है क्योंकि "a" के बराबर नहीं है! ""

== और! के बीच के स्थान के साथ लिखा जा सकता है


1
false because "a" is not equals to !" "! "" का मतलब है कि बूल को कास्ट करें और नकारें कि "" सत्य है और! "" असत्य है।
ज़ाफी

@quarry हां, मैं स्पष्टीकरण के अंदर बहुत ज्यादा नहीं गया: पी
माइकल लाफ़ार्ग

29

==!इस तरह मौजूद नहीं है। यह कुछ हद तक गूढ़ धारणा है== !

जैसा कि उन ऑपरेशनों में रिक्त स्थान नहीं होता है, आप आसानी से लिख सकते हैं a --> b, जो इसका मूल्यांकन करता है a-- > b, लेकिन अजीब लगेगा।

तो, सवाल के रूप में: करने के लिए तैयार किया "a" ==! " "जाएगा "a" == !" "। किसी स्ट्रिंग का नेग कास्टिंग द्वारा कवर किया जाता है , जिसका अर्थ है किसी भी स्ट्रिंग लेकिन, "0"और " "जब डाली जाती है, तो true

इस प्रकार, अभिव्यक्ति "a" == !" "स्थानांतरित हो जाएगी:

  1. "a" == !" "
  2. "a" == !false
  3. "a" == true

और, जैसा string "a"कि नहीं है bool true, यह पूरी अभिव्यक्ति का मूल्यांकन करता है false

तो, कहानी का नैतिक क्या है? अपने आप को गुम या गलत स्थान पर रखकर भ्रमित न होने दें! :)


3
इस उत्तर में कहा गया है, "ए == सच सही का मूल्यांकन करता है क्योंकि खाली स्ट्रिंग को बूलियन मान के लिए सही नहीं माना जाता है। अभिव्यक्ति "ए" === सच झूठ का मूल्यांकन करेगा।
पास्कल रोजिन

25

==! संचालक नहीं है

==!एक php तुलना ऑपरेटर बिल्कुल नहीं है - यह वैसा ही है == !(स्थान पर ध्यान दें)

अर्थात

if ("a" !== " ") {
    // evaluates to true - "a" and " " are not equal
}

if ("a" == !" ") {
    // unreachable
} else {
    // evaluates to false - "a" is not equal to true (!" " evaluates to true)
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.