क्या डबल करता नहींPHP में ऑपरेटर ?
उदाहरण के लिए:
return !! $row;
कोड ऊपर क्या करेगा?
क्या डबल करता नहींPHP में ऑपरेटर ?
उदाहरण के लिए:
return !! $row;
कोड ऊपर क्या करेगा?
जवाबों:
यह "डबल नहीं ऑपरेटर" नहीं है, यह दो बार लागू नहीं ऑपरेटर है। दाईं ओर !
एक बूलियन में परिणाम होगा, चाहे ऑपरेंड की परवाह किए बिना । फिर बायां!
उस बूलियन को नकार जाएगा।
इसका मतलब यह है कि किसी भी सही मूल्य (शून्य, गैर-खाली स्ट्रिंग्स और सरणियों, आदि के अलावा) आपको बूलियन मान मिलेगा TRUE
, और किसी भी गलत मान के लिए (0, 0.0 NULL
, खाली स्ट्रिंग्स या खाली सरणियां) आपको मिलेंगी बूलियन मूल्यFALSE
।
यह कार्यात्मक रूप से एक कास्ट के बराबर है boolean
:
return (bool)$row;
!!
बराबर मानता है (bool)
? या अलग मशीन कोड चलाया जाएगा जिसके आधार पर एक का उपयोग किया जाता है?
!value
, और यदि समान संख्या में बैंग्स है तो यह उसी तरह होगा (bool) value
।
बूल को कास्टिंग के रूप में यह एक ही (या लगभग समान है - कुछ कोने का मामला हो सकता है)। अगर $row
सच्चा होता, तो !! $row
सच भी होता।
लेकिन अगर आप हासिल करना चाहते हैं (bool) $row
, तो आपको शायद बस का उपयोग करना चाहिए - और कुछ "दिलचस्प" अभिव्यक्तियाँ नहीं;)
!!
C (++) में प्रोग्रामिंग से बची हुई आदत है। सी करने में PHP में एक कास्ट उतना आसान नहीं है, आप कई अलग-अलग समस्याएं प्राप्त कर सकते हैं, चेतावनियों को संकलित कर सकते हैं !!
।
operator!
अधिभार है, इसका उपयोग C++
करना खतरनाक होगा। इसके अलावा, आप सी में संरचनाएं नहीं डाल सकते हैं, या !
उनके साथ उपयोग नहीं कर सकते हैं। इसके अलावा अगर किसी चीज को नकारा जा सकता है, तो आप सबसे अधिक संभव है कि वह किसी ऐसे फ़ंक्शन से वापस लौट सके, जो बहुत ज्यादा इसे एक बूलियन बनाता है। क्या आप वाकई सी के बारे में बात कर रहे हैं?
!!
कुछ भी "दिलचस्प" नहीं है जैसा कि आपने दावा किया है। यह C से जावास्क्रिप्ट तक सभी जगह है।
इसका मतलब है कि अगर $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
"नॉट" "कई भाषाओं में यह समझने का एक सुविधाजनक तरीका है कि किसी भी अभिव्यक्ति के परिणाम के लिए भाषा क्या सच मानती है। उदाहरण के लिए, पायथन में :
>>> not not []
False
>>> not not [False]
True
यह उन जगहों पर सुविधाजनक हो सकता है जहां आप किसी जटिल मूल्य को कुछ कम करना चाहते हैं जैसे "क्या सभी में एक मूल्य है?"।
एक और मानव, शायद सरल, नहीं 'पढ़ने' का तरीका:
सबसे पहला '!' 2 चीजें करता है: मूल्य को बूलियन में परिवर्तित करें, फिर इसके विपरीत आउटपुट करें। तो यह सच है अगर मूल्य एक 'झूठा' है।
द्वितीय '!' बस पहले के विपरीत उत्पादन करने के लिए है।
तो, मूल रूप से, इनपुट मूल्य कुछ भी हो सकता है, शायद एक स्ट्रिंग, लेकिन आप एक बूलियन आउटपुट चाहते हैं, इसलिए पहले '!' का उपयोग करें। इस बिंदु पर, यदि आप इनपुट मूल्य 'गलत' होने पर TRUE चाहते हैं, तो यहाँ रुकें और केवल एक '' का उपयोग करें! ' अन्यथा यदि आप चाहते हैं कि इनपुट मूल्य 'सत्य' होने पर TRUE हो, तो एक और जोड़ें! '।
आइए देखें
!$a;
बल्कि व्याख्या करने से! ऑपरेटर के रूप में लेने के रूप में
मूल्य के विपरीत बूलियन अपने अधिकार के लिए
पढ़ना
बूलियन को अभिव्यक्ति के विपरीत लें अपने अधिकार में ले लें
इस मामले में
$a;
एक अभिव्यक्ति हो सकती है
ऐसा है
!$a;
ऐसा है
!!$a;
तथा
!!!$a;
और इसी तरह, इनमें से प्रत्येक एक वैध अभिव्यक्ति है, ऑपरेटर उनमें से प्रत्येक के लिए तैयार किया जा सकता है।
return (bool) $row;