2011-08-22 9 views
12

मैं सोच रहा था कि नीचे दो मामलों में क्या अंतर है, और किसकी सिफारिश की जाती है?

$val = 0; 

if (!$val) { 
    //True 
} 

if (empty($val) { 
    //It's also True 
} 

उत्तर

21

PHP type comparison table पर एक नज़र डालें।

यदि आप तालिका की जांच करते हैं, तो आप देखेंगे कि सभी मामलों के लिए, empty($x)!$x जैसा ही है। तो यह अनियंत्रित चर को संभालने के लिए नीचे आता है। !$x एक E_NOTICE बनाता है, जबकि empty($x) नहीं करता है।

+0

+1। यह भी ध्यान रखें कि यह '! = [$ वैल्यू का मूल्यांकन करने का बूलियन परिणाम] जैसा है, इसलिए पहली तालिका का अंतिम स्तंभ अधिकतर आपको देखना चाहिए। – rockerest

+0

+1 तुलना तालिका पर अच्छा लगता है। –

+0

धन्यवाद, यही मुझे जानने की जरूरत है। तो मुझे लगता है कि खाली ($ x) सुरक्षित दृष्टिकोण है। मुझे लगता है कि अंतर नगण्य प्रदर्शन के रूप में सही है? – Bachx

4

यदि आप खाली उपयोग करते हैं और चर सेट कभी नहीं बनाया गया था, तो कोई चेतावनी/त्रुटि नहीं फेंक दी जाएगी।

3

चलो देखते हैं:

  • "" (कोई रिक्त स्ट्रिंग)
  • 0 (एक पूर्णांक के रूप में 0)
  • :

    empty documentation:

    निम्नलिखित बातें empty माना जाता है

  • 0.0 (0 एक नाव के रूप में)
  • "0" (0 स्ट्रिंग के रूप)
  • NULL
  • FALSE
  • array() (एक खाली सरणी)
  • var $var; (एक चर घोषित है, लेकिन एक में एक मूल्य के बिना कक्षा)

Booleans documentation:

जब बूलियन को बदलने, निम्न मान FALSE माना जाता है:

  • बूलियन FALSE ही
  • पूर्णांक 0 (शून्य)
  • नाव 0.0 (शून्य)
  • खाली स्ट्रिंग, और स्ट्रिंग "0"
  • शून्य तत्वों
  • शून्य सदस्य चर के साथ एक वस्तु के साथ एक सरणी (PHP 4 केवल)
  • रिक्त टैग्स से बनाए गए विशेष प्रकार NULL (सेट नहीं चर सहित)
  • SimpleXML वस्तुओं

ऐसा लगता है कि एकमात्र अंतर (परिणामी मूल्य के संबंध में) यह है कि कैसे SimpleXML उदाहरण संभाला जाता है।बाकी सब कुछ एक ही परिणाम देने लगता है (यदि आप निश्चित रूप से बुलियन कास्ट उलटा करते हैं)।

+0

तो निष्कर्ष क्या है? सूची से, बूलियन अधिक मजबूत जांच की तरह लगता है ... –

+0

यह गलत है। पीएचपी खोल पर एक त्वरित परीक्षण से पता चलता है कि 'खाली 'खाली' SimpleXMLElement' उदाहरणों को खाली करता है जैसे '!' करता है; यह केवल 'खाली' दस्तावेज में एक त्रुटि है जिसका उल्लेख नहीं किया गया है। –

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