PHP में डबल नहीं (!!) ऑपरेटर


188

क्या डबल करता नहींPHP में ऑपरेटर ?

उदाहरण के लिए:

return !! $row;

कोड ऊपर क्या करेगा?


32
यह अनिवार्य रूप से करने जैसा ही हैreturn (bool) $row;
WildlyInaccurate

5
मैं सोच रहा था कि उनमें से कौन तेज है और हमारे पास विजेता के रूप में (बुल) है। i.stack.imgur.com/dcnsM.png
बिनोद कलाथिल

1
@ बिनोद एक अच्छी जानकारी है, इसके लिए धन्यवाद!
रॉबिन के

जवाबों:


290

यह "डबल नहीं ऑपरेटर" नहीं है, यह दो बार लागू नहीं ऑपरेटर है। दाईं ओर !एक बूलियन में परिणाम होगा, चाहे ऑपरेंड की परवाह किए बिना । फिर बायां! उस बूलियन को नकार जाएगा।

इसका मतलब यह है कि किसी भी सही मूल्य (शून्य, गैर-खाली स्ट्रिंग्स और सरणियों, आदि के अलावा) आपको बूलियन मान मिलेगा TRUE, और किसी भी गलत मान के लिए (0, 0.0 NULL, खाली स्ट्रिंग्स या खाली सरणियां) आपको मिलेंगी बूलियन मूल्यFALSE

यह कार्यात्मक रूप से एक कास्ट के बराबर है boolean:

return (bool)$row;

22
"डबल-नॉन-ऑपरेटर" या "डबल नॉट-ऑपरेटर" .. यह निर्भर करता है कि आपने इसे कैसे पढ़ा।
निक

9
@nickf वास्तव में नहीं, "डबल नहीं ऑपरेटर" एक ऑपरेटर को संदर्भित करता है, न कि दो बार ऑपरेटर का उपयोग करने का कार्य।
थियो

3
@ क्या, यह वास्तव में एक ऑपरेटर है? क्या दुभाषिया इस मामले में !!बराबर मानता है (bool)? या अलग मशीन कोड चलाया जाएगा जिसके आधार पर एक का उपयोग किया जाता है?
पेसरियर

यह जावास्क्रिप्ट के लिए भी काम करता है, यहाँ जावास्क्रिप्ट के लिए फर्जी मूल्यों की एक सूची है और PHP के लिए झूठे मूल्यों
जोमार सेविज़ो

1
आप जितना चाहें उतना उपयोग कर सकते हैं। यदि 'बैंग्स' (विस्मयादिबोधक बिंदु) की विषम संख्या है, तो यह उसी तरह एक ऑपरेशन नहीं होगा !value, और यदि समान संख्या में बैंग्स है तो यह उसी तरह होगा (bool) value
हीरा

51

बूल को कास्टिंग के रूप में यह एक ही (या लगभग समान है - कुछ कोने का मामला हो सकता है)। अगर $rowसच्चा होता, तो !! $rowसच भी होता।

लेकिन अगर आप हासिल करना चाहते हैं (bool) $row, तो आपको शायद बस का उपयोग करना चाहिए - और कुछ "दिलचस्प" अभिव्यक्तियाँ नहीं;)


2
धन्यवाद कि वास्तव में समझ में आता है, मैं nevers इस तरह से अन्य प्रोग्रामिंग भाषा में कुछ देखा।
आंद्रेई

16
उपयोग करना !!C (++) में प्रोग्रामिंग से बची हुई आदत है। सी करने में PHP में एक कास्ट उतना आसान नहीं है, आप कई अलग-अलग समस्याएं प्राप्त कर सकते हैं, चेतावनियों को संकलित कर सकते हैं !!
निकी सीपी

1
@ मैकेनिक - यह अजीब लगता है, IMO ... चूंकि operator!अधिभार है, इसका उपयोग C++करना खतरनाक होगा। इसके अलावा, आप सी में संरचनाएं नहीं डाल सकते हैं, या !उनके साथ उपयोग नहीं कर सकते हैं। इसके अलावा अगर किसी चीज को नकारा जा सकता है, तो आप सबसे अधिक संभव है कि वह किसी ऐसे फ़ंक्शन से वापस लौट सके, जो बहुत ज्यादा इसे एक बूलियन बनाता है। क्या आप वाकई सी के बारे में बात कर रहे हैं?
विराटपुर

2
मैंने देखा है !! कई कार्यक्रमों में 1/0 के लिए एक सुरक्षित रूपांतरण के रूप में। (जैसा कि बूलियन वास्तव में सी में 0 / "नॉन जीरो" के अलावा कुछ भी नहीं है)
प्रो। फाकलेन

1
@viraptor, !! कुछ भी "दिलचस्प" नहीं है जैसा कि आपने दावा किया है। यह C से जावास्क्रिप्ट तक सभी जगह है।
पचेरियर

18

इसका मतलब है कि अगर $rowएक है truthy मूल्य है, यह वापस आ जाएगी true, अन्यथा false, एक बूलियन मान को बदलने।

यहाँ उदाहरण है php डॉक्स से बूलियन रूपांतरण के भाव।

Expression             Boolean
$x = "";               FALSE
$x = null;             FALSE
var $x;                FALSE
$x is undefined        FALSE
$x = array();          FALSE
$x = array('a', 'b');  TRUE
$x = false;            FALSE
$x = true;             TRUE
$x = 1;                TRUE
$x = 42;               TRUE
$x = 0;                FALSE
$x = -1;               TRUE
$x = "1";              TRUE
$x = "0";              FALSE
$x = "-1";             TRUE
$x = "php";            TRUE
$x = "true";           TRUE
$x = "false";          TRUE

7

"नॉट" "कई भाषाओं में यह समझने का एक सुविधाजनक तरीका है कि किसी भी अभिव्यक्ति के परिणाम के लिए भाषा क्या सच मानती है। उदाहरण के लिए, पायथन में :

>>> not not []
False
>>> not not [False]
True

यह उन जगहों पर सुविधाजनक हो सकता है जहां आप किसी जटिल मूल्य को कुछ कम करना चाहते हैं जैसे "क्या सभी में एक मूल्य है?"।


1

एक और मानव, शायद सरल, नहीं 'पढ़ने' का तरीका:

  • सबसे पहला '!' 2 चीजें करता है: मूल्य को बूलियन में परिवर्तित करें, फिर इसके विपरीत आउटपुट करें। तो यह सच है अगर मूल्य एक 'झूठा' है।

  • द्वितीय '!' बस पहले के विपरीत उत्पादन करने के लिए है।

तो, मूल रूप से, इनपुट मूल्य कुछ भी हो सकता है, शायद एक स्ट्रिंग, लेकिन आप एक बूलियन आउटपुट चाहते हैं, इसलिए पहले '!' का उपयोग करें। इस बिंदु पर, यदि आप इनपुट मूल्य 'गलत' होने पर TRUE चाहते हैं, तो यहाँ रुकें और केवल एक '' का उपयोग करें! ' अन्यथा यदि आप चाहते हैं कि इनपुट मूल्य 'सत्य' होने पर TRUE हो, तो एक और जोड़ें! '।


0

आइए देखें

!$a;

बल्कि व्याख्या करने से! ऑपरेटर के रूप में लेने के रूप में

मूल्य के विपरीत बूलियन अपने अधिकार के लिए

पढ़ना

बूलियन को अभिव्यक्ति के विपरीत लें अपने अधिकार में ले लें

इस मामले में

$a;

एक अभिव्यक्ति हो सकती है

ऐसा है

!$a;

ऐसा है

!!$a;

तथा

!!!$a;

और इसी तरह, इनमें से प्रत्येक एक वैध अभिव्यक्ति है, ऑपरेटर उनमें से प्रत्येक के लिए तैयार किया जा सकता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.