2012-10-03 22 views
5

यहां काफी सीधे आगे प्रश्न। कुछ कोड देख रहे थे और मैंने एक ऐसा फ़ंक्शन देखा है जो किसी दिए गए चर को बुलियन में परिवर्तित करता है। यह इस प्रकार है:PHP '!!' का उपयोग करके बुलियन में परिवर्तित

function to_bool($var) { 
    return !!$var; 
} 

बहुत आसान है, लेकिन यह कैसे काम करता है? इससे पहले कभी नहीं देखा, और googling वास्तव में मुझे कहीं भी नहीं मिला है। क्या अतिरिक्त '!' परिणाम का फ्लिप सॉर्ट करें? 'var var' का उपयोग यह जांचने के लिए किया जा सकता है कि कोई var गलत है या नहीं, तो '!!' एक 'झूठी' को सच में बदल दें, और इसके विपरीत?

+0

आपका मतलब था '(बूल) $ var;' क्योंकि मैंने कभी उन दोनों के सामने कभी नहीं देखा है !! एक चर – rsz

+2

'!' से पहले, नकारात्मक, दो दोहरी नकारात्मक, जो भी बूलियन के लिए परिवर्तित हो रहा है ... – jeremy

+0

डबल नकारात्मक, यह सोच रहा था। बहुत अजीब। यह पूरी तरह से विश्वसनीय आपको लगता है कि है? –

उत्तर

9

यह कैसे काम करता है?

ऑपरेटर चर को एक सशर्त में स्थानांतरित नहीं करता है। इसलिए, परिणाम बुलियन है। दूसरा अपना मूल्य नहीं फिसलता है।

यह सिर्फ बल्कि इस तरह के एक समारोह से अपने कोड में एक स्पष्ट डाली उपयोग करने के लिए और अधिक स्पष्ट है:

(bool)$var; 
+0

पैडेंटिक होने के लिए, यह अस्थायी अनुक्रम में दूसरा 'नहीं' है, या भौतिक अनुक्रम में पहला 'नहीं' है, जो मान को फ़्लिप करता है। –

+0

@ सेठ: ठीक है। इस तरह मेरा मतलब था। – webbiedave

3

एक ! एक उलटा बूलियन होगा, इसलिए दो !! एक गैर-उलटा बूलियन बनाते हैं। यह एक चर के एक डबल निषेध है और एक बूलियन प्रकार के रूप में लौट आए

3

ले लो !! 2

!2!(true)

जो !false अंतिम परिणाम true का मूल्यांकन करने के लिए मूल्यांकन करता है। बुलियन मूल रूप से सही ऑपरेंड को बूल के रूप में नहीं मानता है।

2

हममम ... दिलचस्प।

ठीक है, PHP यह निर्धारित करते समय नियमों के एक विशिष्ट सेट का पालन करता है कि कोई चर "सत्य" या "गलत" है या नहीं।

कुछ ऑपरेटरों का उपयोग करना उस निर्णय को मजबूर करेगा। उदाहरण के लिए, जब आप एक स्ट्रिंग "a" और . ऑपरेटर के साथ एक पूर्णांक 2 जोड़ने के लिए, आप "a2" प्राप्त करना चाहते हैं, क्योंकि . ऑपरेटर की मंशा को श्रेणीबद्ध करने के लिए है।

यहां, पहले ! का अर्थ है कि आप चर को अस्वीकार करने का प्रयास कर रहे हैं। किसी भी चीज़ को अस्वीकार करने का मतलब है कि आपको पहले इसे बुलियन के रूप में पेश करना होगा, यही वह है जो यह करता है। फिर दूसरा ! बस इसे वापस अस्वीकार करता है।

यह करने का यह एक अजीब तरीका है। स्पष्ट रूप से, if ($var) आपके if (to_bool($var)) के समान परिणाम देगा।

+0

क्या आपको लगता है कि '!! $ var' 'to_bool ($ var)' की जांच करने का एक तेज तरीका होगा? वास्तव में जिज्ञासा से बाहर! स्पष्ट रूप से एक सुंदर नगण्य अंतर अगर कोई है! –

+0

'अगर ($ var)' सबसे तेज़ है, लेकिन हां, अंतर नगण्य होगा। –

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

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