क्यों दोनों (और) खाली है () की जाँच करें


269

वहाँ के बीच एक अंतर है issetऔर !empty। अगर मैं यह डबल बूलियन जांच करता हूं, तो क्या यह इस तरह से सही है या निरर्थक है? और क्या ऐसा ही करने का एक छोटा तरीका है?

isset($vars[1]) AND !empty($vars[1])

3
विभिन्न प्रकार के चर के साथ उनका उपयोग करने के परिणामों पर एक अच्छा चार्ट है (उनके बीच मतभेद हैं): virendrachandak.com/demos/php-isset-vs-empty-vs-is_null.php
जेफ क्लेटन

स्पष्ट सटीक पूरक isset और is_null हैं, लेकिन खाली कुछ अलग हैं। यह सब उस डेटा के प्रकार पर निर्भर करता है जिस पर आप परीक्षण कर रहे हैं।
जेफ क्लेटन

जवाबों:


419

यह पूरी तरह से बेमानी है। emptyके लिए अधिक या कम आशुलिपि है !isset($foo) || !$foo, और !emptyके अनुरूप है isset($foo) && $foo। Ie मूल्य की सत्यता के लिए प्लस की एक अतिरिक्त जांच emptyकी रिवर्स बात करता है । isset

या दूसरे शब्दों में, emptyवैसा ही है !$foo, लेकिन अगर चर मौजूद नहीं है तो चेतावनी नहीं फेंकते। यह इस समारोह का मुख्य बिंदु है: चर सेट किए जाने के बारे में चिंता किए बिना एक बूलियन तुलना करें।

मैनुअल इसे इस तरह डालता है:

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

आप बस !empty($vars[1])यहाँ उपयोग कर सकते हैं।


7
लेकिन फिर अगर वहाँ कोई नहीं है $vars[1]वह एक नोटिस मिलेगा।
करीम79

6
मुझे नहीं पता कि मुझे वह विचार कहां से मिला। साथ ही एक।
करीम79

8
@karim IMO emptyPHP में सबसे गलत समझा कार्यों में से एक है। "कोई चेतावनी उत्पन्न नहीं होती है" के बारे में छोटे स्निपेट को अनदेखा करना बहुत आसान है। मुझे इसे यहाँ पोस्ट करने के लिए खुद को कुछ समय के लिए दस्तावेज़ को स्कैन करना पड़ा।
deceze

2
empty($vars[1])किसी भी चेतावनी का कारण भी $vars[1]सेट नहीं है, लेकिन echo $vars[1]होगा। मैंने तथ्य का उपयोग करके जाँच की echo $vars[1]; if (!empty($vars[1])) echo 1; else echo 0;
अमिल वडूवारा

4
@Shahor कई भाषाओं के संबंध में 0के रूप में false। PHP केवल एक ही नहीं है। फिर भी निश्चित नहीं है कि आपकी शिकायत क्या है।
deceze

33

isset() एक चर सेट है और शून्य नहीं है, तो परीक्षण:

http://us.php.net/manual/en/function.isset.php

empty() जब चर निश्चित मानों पर सेट होता है तो सच वापस आ सकता है:

http://us.php.net/manual/en/function.empty.php

इसे प्रदर्शित करने के लिए, निम्न कोड को $ the_var के साथ अनसाइन किया गया, 0 पर सेट करें और 1 पर सेट करें।

<?php

#$the_var = 0;

if (isset($the_var)) {
  echo "set";
} else {
  echo "not set";
}

echo "\n";

if (empty($the_var)) {
  echo "empty";
} else {
  echo "not empty";
}
?>

12

स्वीकृत उत्तर सही नहीं है।

isset () खाली () के बराबर नहीं है

यदि आप इस मार्ग से नीचे जाते हैं, तो आप बगों को डिबग करने के लिए कुछ अप्रिय और कठिन बना देंगे। उदाहरण के लिए इस कोड को चलाने का प्रयास करें:

<?php

$s = '';

print "isset: '" . isset($s) . "'. ";
print "!empty: '" . !empty($s) . "'";

?>

https://3v4l.org/J4nBb


7
किसी भी तरह से स्वीकार किए गए जवाब से पता चलता है कि issetइसके बराबर है !empty
deceze

8
$a = 0;
if (isset($a)) { //$a is set because it has some value ,eg:0
    echo '$a has value';
}
if (!empty($a)) { //$a is empty because it has value 0
    echo '$a is not empty';
} else {
    echo '$a is empty';
}

1
लेकिन आपने वैरिएबल को सेट नहीं किया है।
अमिल वडूवारा

3

खाली चेक केवल संदर्भित चर / सरणी का एक मान होता है यदि आप php doc (खाली) की जांच करते हैं तो आप देखेंगे कि यह चीजें emtpy मानी जाती हैं

* "" (an empty string)
* 0 (0 as an integer)
* "0" (0 as a string)
* NULL
* FALSE
* array() (an empty array)
* var $var; (a variable declared, but without a value in a class)

जब चर गड़बड़ी की जाँच करें और अशक्त नहीं है, जो php डॉक्टर में भी पाया जा सकता है (isset)


2

यह आवश्यक नहीं है।

यदि चर मौजूद नहीं है, तो कोई चेतावनी उत्पन्न नहीं होती है। इसका मतलब है कि खाली () अनिवार्य रूप से संक्षिप्त (isset ($ var)) के बराबर है || $ वर == असत्य।

php.net


2
यह किसी भी PHP संस्करण पर आवश्यक नहीं है, क्योंकि खाली पहले से ही (नहीं) के लिए जाँच करता है। आप इस तथ्य को भ्रमित कर रहे हैं कि खाली अब प्रश्न के साथ अभिव्यक्तियों का समर्थन करता है।
alxgb

यह केवल पांच साल बाद सच है।
लेनन

2

isset($vars[1]) AND !empty($vars[1])के बराबर है !empty($vars[1])

मैंने इसे आनुभविक रूप से दिखाने के लिए सरल कोड तैयार किया।

अंतिम पंक्ति अपरिभाषित चर है।

+-----------+---------+---------+----------+---------------------+
| Var value | empty() | isset() | !empty() | isset() && !empty() |
+-----------+---------+---------+----------+---------------------+
| ''        | true    | true    | false    | false               |
| ' '       | false   | true    | true     | true                |
| false     | true    | true    | false    | false               |
| true      | false   | true    | true     | true                |
| array ()  | true    | true    | false    | false               |
| NULL      | true    | false   | false    | false               |
| '0'       | true    | true    | false    | false               |
| 0         | true    | true    | false    | false               |
| 0.0       | true    | true    | false    | false               |
| undefined | true    | false   | false    | false               |
+-----------+---------+---------+----------+---------------------+

और कोड

$var1 = "";
$var2 = " ";
$var3 = FALSE;
$var4 = TRUE;
$var5 = array();
$var6 = null;
$var7 = "0";
$var8 = 0;
$var9 = 0.0;

function compare($var)
{
    print(var_export($var, true) . "|" .
        var_export(empty($var), true) . "|" .
        var_export(isset($var), true) . "|" .
        var_export(!empty($var), true) . "|" .
        var_export(isset($var) && !empty($var), true) . "\n");
}

for ($i = 1; $i <= 9; $i++) {
    $var = 'var' . $i;
    compare($$var);
}

@print(var_export($var10, true) . "|" .
    var_export(empty($var10), true) . "|" .
    var_export(isset($var10), true) . "|" .
    var_export(!empty($var10), true) . "|" .
    var_export(isset($var10) && !empty($var10), true) . "\n");

अपरिभाषित चर का मूल्यांकन बाहर के फ़ंक्शन से किया जाना चाहिए, क्योंकि फ़ंक्शन स्वयं कार्यक्षेत्र में अस्थायी चर बनाता है।


0

"खाली": केवल चर पर काम करता है। विभिन्न चर प्रकारों के लिए खाली का मतलब अलग-अलग हो सकता है (चेक मैनुअल: http://php.net/manual/en/function.empty.emp )।

"isset": जाँचता है कि क्या चर मौजूद है और एक सच्चे NULL या गलत मान के लिए जाँच करता है। "परेशान" कहकर परेशान किया जा सकता है। एक बार फिर, मैनुअल की जांच करें।

आपके द्वारा उपयोग किए जा रहे चर प्रकार पर निर्भर करता है।

मैं कहूंगा, यह दोनों के लिए जाँच करने के लिए सुरक्षित है, क्योंकि आप सबसे पहले जाँच कर रहे हैं कि चर मौजूद है या नहीं और अगर यह वास्तव में रिक्त या खाली नहीं है।


3
@szahn "दोनों के लिए जाँच करने के लिए सुरक्षित", - आप प्रोग्रामर के रूप में सुरक्षा के लिए इच्छित सब कुछ जाँच सकते हैं। लेकिन अगर आपका कोड बेमानी है तो आप प्रोग्रामर के रूप में निरर्थक हो सकते हैं।
madlopt

0

अगर हम नीचे दिए गए सबमिट बटन के माध्यम से जोड़ने / संपादित करने के लिए एक ही पृष्ठ का उपयोग करते हैं

<input type="hidden" value="<?echo $_GET['edit_id'];?>" name="edit_id">

तो हमें उपयोग नहीं करना चाहिए

isset($_POST['edit_id'])

bcoz edit_idको हर समय सेट किया जाता है चाहे वह पृष्ठ जोड़ें या संपादित करें, इसके बजाय हमें नीचे दी गई स्थिति का उपयोग करना चाहिए

!empty($_POST['edit_id'])

पिछली पोस्ट प्रस्तुत की गई थी bcoz i प्रेस गलती से दर्ज करें, यहाँ मेरा पूरा जवाब है ... नीचे क्यों? :(
दीचो

0
  • PHP वेब साइट से, empty()फ़ंक्शन का जिक्र करते हुए :

FALSEयदि varगैर-रिक्त और गैर-शून्य मान है, तो लौटाता है ।

यह जानना अच्छी बात है। दूसरे शब्दों में, से सब कुछ में NULL, करने के लिए 0करने के लिए "" वापस आ जाएगी TRUEजब का उपयोग कर empty()कार्य करते हैं।

  • यहाँ इस बात का वर्णन है कि isset()फ़ंक्शन क्या देता है:

रिटर्न TRUEअगर varमौजूद है, FALSEअन्यथा।

दूसरे शब्दों में, केवल वे चर जो अस्तित्व में नहीं हैं (या, कड़ाई से NULLमान वाले चर ) फ़ंक्शन FALSEपर लौट आएंगे isset()। सभी चर जिनमें किसी भी प्रकार का मूल्य है, चाहे वह 0एक खाली पाठ स्ट्रिंग हो, आदि वापस आ जाएंगे TRUE

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