isset () और खाली () - क्या उपयोग करना है


105

क्या आप मेरी कोडिंग शैली को बेहतर बनाने में मेरी मदद कर सकते हैं? :) कुछ कार्यों में मुझे जाँचने की आवश्यकता है - चर खाली है या कुछ है। इस कार्य को हल करने के लिए, मैं आमतौर पर निम्नलिखित कार्य करता हूं।

जांचें - यह चर सेट है या नहीं? यदि यह सेट है - मैं जांचता हूं - यह खाली है या नहीं?

<?php
    $var = '23';
    if (isset($var)&&!empty($var)){
        echo 'not empty';
    }else{
        echo 'is not set or empty';
    }
?>

और मेरे पास एक सवाल है - क्या मुझे खाली () से पहले isset () का उपयोग करना चाहिए - क्या यह आवश्यक है? TIA!


खाली है! isset ($ var) || $ var == असत्य
zloctb

2
मेरे उत्पीड़न में खाली () PHP का एक भयावह विकास है। जैसा कि यह किसी भी रूप में "0" को "खाली" मानता है, आप बहुत सारे डिबगिंग समय के बुरे जाल में पड़ सकते हैं। मैं कहता हूं: हर कीमत पर बचें और सिर्फ तर्क खुद लिखें
जॉन

जवाबों:


143

यह निर्भर करता है कि आप क्या देख रहे हैं, यदि आप सिर्फ यह देखना चाहते हैं कि क्या यह खाली है तो इसका उपयोग करें emptyक्योंकि यह जांचता है कि क्या यह सेट है या नहीं, यदि आप जानना चाहते हैं कि कुछ सेट है या नहीं isset

Empty जाँचता है कि क्या चर सेट है और अगर यह है तो यह अशक्त, "", 0, आदि के लिए जाँचता है

Isset अगर यह सेट है तो बस जाँच करता है, यह शून्य नहीं हो सकता है

इसके साथ empty, निम्नलिखित बातों को खाली माना जाता है:

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

से http://php.net/manual/en/function.empty.php


जैसा कि टिप्पणियों में उल्लेख किया गया है कि खाली होने के साथ चेतावनी की कमी भी महत्वपूर्ण है ()

PHP मैनुअल कहता है

खाली () बूलियन (var) के विपरीत है, सिवाय इसके कि कोई चेतावनी उत्पन्न नहीं होती है जब चर सेट नहीं होता है

इज़्ज़त के बारे में

PHP मैनुअल कहता है

isset () FALSE को लौटाएगा यदि NULL के लिए सेट किए गए चर का परीक्षण किया जाए


आपका कोड ठीक होगा:

<?php
    $var = '23';
    if (!empty($var)){
        echo 'not empty';
    }else{
        echo 'is not set or empty';
    }
?>

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

$var = "";

if(empty($var)) // true because "" is considered empty
 {...}
if(isset($var)) //true because var is set 
 {...}

if(empty($otherVar)) //true because $otherVar is null
 {...}
if(isset($otherVar)) //false because $otherVar is not set 
 {...}

इसका मतलब है - ऊपर दिए गए कोड में मैं दो बार वेरिएबल सेट कर रहा हूं या नहीं? :)
दिमित्री बेलवेंटसेव

बस जांचें कि क्या यह खाली है, अगर यह नहीं है तो php कोई त्रुटि नहीं करेगा।
Pez Cuckow

3
आप सबसे बड़े बिंदु को छोड़ रहे हैं empty: जब परीक्षण किया गया चर मौजूद नहीं होता है तो यह चेतावनी नहीं देता है। यह इस समारोह का पूरा बिंदु है, अन्यथा यह समान है == false
deceze

1
इसलिए, मैनुअल में यह तथ्य कि "कोई चेतावनी उत्पन्न नहीं होती है जब चर सेट नहीं होता है" मुझे भ्रमित करता है। कोई चेतावनी का मतलब यह नहीं है कि मुझे नीचे दिए गए कोड में परेशानी नहीं होगी। अब यह मेरे लिए स्पष्ट है। बहुत बहुत धन्यवाद!
दिमित्री बेलावेंत्सेव

"अगर यह सेट है तो चेक इनसेट है, यह अभी भी अशक्त हो सकता है" यह सच नहीं है: issetएक अशक्त (और मौजूदा) चर पर मूल्यांकन करेगा false
netcoder

12

अपने विशेष मामले में: if ($var)

issetअगर आपको पता नहीं है कि चर मौजूद है या नहीं, तो आपको इसका उपयोग करने की आवश्यकता है । चूंकि आपने इसे पहली पंक्ति में घोषित किया था, हालांकि आप जानते हैं कि यह मौजूद है, इसलिए आपको इसका उपयोग करने की आवश्यकता नहीं है, इसे उपयोग नहीं करना चाहिएisset

उसी के लिए जाता है empty, केवल वह emptyभी मूल्य की सच्चाई के लिए एक चेक को जोड़ती है । emptyके बराबर है !isset($var) || !$varऔर !emptyके बराबर है isset($var) && $var, या है isset($var) && $var == true

यदि आप केवल एक चर का परीक्षण करना चाहते हैं जो सत्यता के लिए मौजूद होना चाहिए , if ($var)पूरी तरह से पर्याप्त और बिंदु तक है।


यह बहुत बेहतर समझाता है। अगर हम इस तरह के अन्य सभी मामलों के लिए तुलना करते हैं !empty is equivalent to isset($var) && $var, तो यह बहुत बढ़िया होगा। साभार @deceze
वीर

6

आप बस खाली () का उपयोग कर सकते हैं - जैसा कि प्रलेखन में देखा गया है , यह गलत वापस आ जाएगा यदि चर का कोई मूल्य नहीं है।

उसी पेज पर एक उदाहरण:

<?php
$var = 0;

// Evaluates to true because $var is empty
if (empty($var)) {
    echo '$var is either 0, empty, or not set at all';
}

// Evaluates as true because $var is set
if (isset($var)) {
    echo '$var is set even though it is empty';
}
?>

यदि आप यह जानना चाहते हैं कि क्या यह NULL नहीं है तो आप isset का उपयोग कर सकते हैं। अन्यथा यह खाली लगता है () अकेले उपयोग करने के लिए ठीक है।


डाउन वोट के लिए स्पष्टीकरण? वह नहीं पूछ रहा है कि क्या वे समान हैं, वह पूछ रहा है कि क्या उसे खाली चेक करने से पहले आइसेट की जांच करने की आवश्यकता है।
क्रिस

मैं नीचे नहीं गया, लेकिन "इस्सेट का उपयोग करें यदि आप जानना चाहते हैं कि यह शून्य नहीं है" सही नहीं है $var = null; isset( $var ) == true:।
जेजे

PHP5 / 4 मैनुअल से: isset () - "निर्धारित करें कि क्या एक चर सेट है और NULL नहीं है।" us.php.net/manual/en/function.isset.php
क्रिस करें

2

यहाँ के आउटपुट हैं isset()और empty()अघोषित, अशक्त, झूठे और सच्चे: 4 संभावनाओं के लिए।

$a=null;
$b=false;
$c=true;

var_dump(array(isset($z1),isset($a),isset($b),isset($c)),true); //$z1 previously undeclared
var_dump(array(empty($z2),empty($a),empty($b),empty($c)),true); //$z2 previously undeclared

//array(4) { [0]=> bool(false) [1]=> bool(false) [2]=> bool(true) [3]=> bool(true) } 
//array(4) { [0]=> bool(true) [1]=> bool(true) [2]=> bool(true) [3]=> bool(false) } 

आप देखेंगे कि सभी 'परेशान' परिणाम मामले को छोड़कर 'खाली' परिणामों के विपरीत हैं $b=false। सभी मानों (शून्य को छोड़कर, जो मूल्य नहीं है, लेकिन एक गैर-मूल्य है) जो झूठ का मूल्यांकन करता है, जब परीक्षण के द्वारा सही हो जाएगाisset 'द्वारा' परीक्षण किया जाता है और 'खाली' द्वारा परीक्षण किए ।

इसलिए isset()जब आप एक चर के अस्तित्व के बारे में चिंतित हों तो उपयोग करें । और उपयोग करें emptyजब आप सही या गलत के लिए परीक्षण कर रहे हों। खालीपन मामलों, उपयोग की वास्तविक प्रकार हैं is_nullऔर ===0, ===false, ===''


1

यदि संस्करण सेट नहीं है, तो रिक्त रिटर्न सही है। लेकिन क्या वेरिएबल खाली नहीं होने पर भी रिटर्न सही है।


-3
$var = 'abcdef';
if(isset($var))
{
   if (strlen($var) > 0);
   {
      //do something, string length greater than zero
   }
   else
   {
     //do something else, string length 0 or less
   }
}

यह एक सरल उदाहरण है। आशा करता हूँ की ये काम करेगा।

संपादित करें: issetघटना में जोड़ा गया एक चर ऊपर की तरह परिभाषित नहीं है, यह एक त्रुटि का कारण होगा, यह देखने के लिए कि क्या इसका पहला सेट कम से कम सड़क के नीचे कुछ सिरदर्द को दूर करने में मदद करेगा।


7
strlen शून्य के तहत ? मैं उस तार को देखना चाहता हूं।
धोखा

@ डिसेज़ बस एक मोटा उदाहरण :) ठीक उपयोग = 0 नहीं <0
Akos
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.