मैं कहाँ उपयोग करूँगा () और खाली है ()


106

मैंने कहीं पढ़ा है कि isset()फ़ंक्शन एक खाली स्ट्रिंग के रूप में व्यवहार करता है TRUE, इसलिए isset()एक HTML फॉर्म से टेक्स्ट इनपुट और टेक्स्ट बॉक्स को मान्य करने का एक प्रभावी तरीका नहीं है।

तो आप यह empty()जांचने के लिए उपयोग कर सकते हैं कि उपयोगकर्ता ने कुछ टाइप किया है।

  1. क्या यह सच है कि isset()फ़ंक्शन एक रिक्त स्ट्रिंग के रूप में व्यवहार करता है TRUE?

  2. फिर मुझे किन स्थितियों में उपयोग करना चाहिए isset()? !empty()अगर कुछ है तो मुझे हमेशा जांचने के लिए उपयोग करना चाहिए ?

के बजाय उदाहरण के लिए

if(isset($_GET['gender']))...

इसका उपयोग करना

if(!empty($_GET['gender']))...

डुप्लिकेट की संभावित डुप्लीकेट जाँच क्यों (दोनों) और खाली है ()
गजस

जवाबों:


136

isset बनाम! खाली

एफटीए:

यदि कोई वैरिएबल (गलत, 0 या रिक्त स्ट्रिंग) सहित कोई मान है तो "isset () चेक करता है, लेकिन NULL नहीं। यदि संस्करण मौजूद है तो TRUE लौटाता है; FALSE अन्यथा।

दूसरी ओर रिक्त () फ़ंक्शन चेक करता है कि चर में रिक्त मान रिक्त स्ट्रिंग, 0, NULL या गलत है। यदि कोई गैर-रिक्त और शून्य-शून्य मान है, तो FALSE लौटाता है। "


47
एफटीए: अनुच्छेद से
जियानक्सिन गाओ

5
empty()खाली सरणी के लिए भी सही है।
Mitya

यहां तक ​​कि थ्रो empty()0 के लिए TRUE लौटाता है, इस ऑपरेटर को गणित के लिए उपयोग करने के लिए एक अच्छा विचार नहीं है यदि "0" गलती से एक स्ट्रिंग है। यह खतरनाक हो सकता है। इसके बजाय, बुनियादी का उपयोग >, <और ==ऑपरेटरों और परिवर्तित वेरिएबल का उपयोग करके intval()या floatval()
कालजयी

33

सबसे सामान्य तरीके से:

  • issetयदि कोई चर (या किसी एरे का एक तत्व, या किसी वस्तु का गुण) मौजूद है , तो परीक्षण होता है (और अशक्त नहीं है)
  • empty परीक्षण अगर एक चर (...) में कुछ गैर-रिक्त डेटा है।


प्रश्न 1 का उत्तर देने के लिए :

$str = '';
var_dump(isset($str));

देता है

boolean true

क्योंकि चर $strमौजूद है।


और प्रश्न 2 :

आपको यह निर्धारित करने के लिए उपयोग करना चाहिए कि क्या चर मौजूद है ; उदाहरण के लिए, यदि आपको एक सरणी के रूप में कुछ डेटा मिल रहा है, तो आपको यह जांचने की आवश्यकता हो सकती है कि क्या उस सरणी में कोई कुंजी है। उदाहरण के लिए / के
बारे में सोचें ।$_GET$_POST

अब, इसके मूल्य पर काम करने के लिए, जब आप जानते हैं कि ऐसा कोई मूल्य है: यह काम है empty


11

वैध इनपुट के लिए न तो एक अच्छा तरीका है।

  • isset() पर्याप्त नहीं है क्योंकि - जैसा कि पहले ही नोट किया गया है - यह एक वैध मान के लिए एक रिक्त स्ट्रिंग मानता है।
  • ! empty() पर्याप्त नहीं है क्योंकि यह '0' को अस्वीकार करता है, जो कि एक वैध मूल्य हो सकता है।

isset()एक खाली स्ट्रिंग के खिलाफ एक समानता चेक के साथ संयुक्त का उपयोग करना नंगे न्यूनतम है जिसे आपको यह सत्यापित करने की आवश्यकता है कि आने वाले पैरामीटर के पास नकारात्मक मान पैदा किए बिना एक मान है:

if( isset($_GET['gender']) and ($_GET['gender'] != '') )
{
  ...
}

लेकिन "नंगे न्यूनतम" से मेरा मतलब बिल्कुल यही है। उपरोक्त सभी कोड यह निर्धारित करते हैं कि क्या इसके लिए कुछ मूल्य है $_GET['gender']। यह करता है नहीं यह निर्धारित करने के लिए मूल्य $_GET['gender']है वैध (जैसे में से एक )।("Male", "Female","FileNotFound")

उसके लिए, जोश डेविस का जवाब देखें


क्योंकि आप एक ढीली तुलना का उपयोग कर रहे हैं, इसलिए आपका सुझाव दिया गया स्निपेट शून्य-ईश / फाल्सी नॉन-स्ट्रिंग मान को हैंडल करते समय झूठी सकारात्मकता देगा। 3v4l.org/aIWqA
mickmackusa

11

issetइसका उपयोग केवल चर के लिए किया जाना चाहिए और न केवल मूल्यों के लिए, इसलिए isset("foobar")एक त्रुटि उत्पन्न होगी। PHP 5.5 के अनुसार, emptyचर और भाव दोनों का समर्थन करता है।

तो अपने पहले प्रश्न के बजाय अगर होना चाहिए issetरिटर्न सही एक चर कि कोई रिक्त स्ट्रिंग धारण के लिए। और जवाब है:

$var = "";
var_dump(isset($var));

प्रकार तुलना टेबल PHP के मैनुअल में इस तरह के सवालों के लिए काफी उपयोगी है।

issetमूल रूप से जांचता है कि एक चर के पास शून्य के अलावा कोई मूल्य है क्योंकि गैर-मौजूदा चर में हमेशा मूल्य शून्य होता हैemptyकाउंटर भाग की तरह है, issetलेकिन पूर्णांक मान 0और स्ट्रिंग मान "0"को भी खाली मानता है । (फिर, प्रकार की तुलना तालिकाओं पर एक नज़र डालें ।)


1
ध्यान दें कि empty()PHP 5.5.0 के रूप में "केवल चर के बजाय" अभिव्यक्ति का समर्थन करता है।
कॉमरेडिक डिक

8

यदि आपके पास $ _POST ['परम'] है और मान लें कि यह स्ट्रिंग प्रकार है

isset($_POST['param']) && $_POST['param'] != '' && $_POST['param'] != '0'

के समान है

!empty($_POST['param'])

4

isset () एक HTML फॉर्म से टेक्स्ट इनपुट और टेक्स्ट बॉक्स को मान्य करने का एक प्रभावी तरीका नहीं है

आप फिर से लिख सकते हैं कि "isset () इनपुट को मान्य करने का एक तरीका नहीं है।" इनपुट को मान्य करने के लिए, PHP के फ़िल्टर एक्सटेंशन का उपयोग करेंfilter_has_var()आपको बताएगा कि क्या चर मौजूद है जबकि filter_input()वास्तव में इनपुट को फ़िल्टर और / या पवित्र करेगा।

ध्यान दें कि आपको filter_has_var()पहले उपयोग नहीं करना है filter_input()और यदि आप उस चर के लिए पूछते हैं जो सेट नहीं है, filter_input()तो बस वापस आ जाएगा null


3

कब और कैसे उपयोग करें:

  1. isset ()

यह सच है 0, 1, रिक्त स्ट्रिंग के लिए, एक स्ट्रिंग एक मूल्य युक्त, सच है, झूठी

अशक्त के लिए गलत

जैसे

$status = 0
if (isset($status)) // True
$status = null 
if (isset($status)) // False
  1. खाली

1 के लिए गलत , एक स्ट्रिंग जिसमें एक मूल्य है, सच है

यह सच है अशक्त, खाली स्ट्रिंग, 0, झूठी उदाहरण के लिए

$status = 0
if(empty($status)) // true
$status = 1
if(empty($status)) // False

2

isset का उपयोग यह निर्धारित करने के लिए किया जाता है कि क्या किसी चीज़ का उदाहरण मौजूद है, यदि किसी चर को त्वरित किया गया है ... यह पैरामीटर के मूल्य से संबंधित नहीं है ...

पास्कल मार्टिन ... +1 ...

खाली () एक चेतावनी उत्पन्न नहीं करता है यदि चर मौजूद नहीं है ... इसलिए, जब आप इसे संशोधित करने का इरादा रखते हैं तो चर के अस्तित्व के लिए परीक्षण करते समय isset () को प्राथमिकता दी जाती है ...


1

उपयोग करना emptyपर्याप्त है:

if(!empty($variable)){
    // Do stuff
}

इसके अतिरिक्त, यदि आप एक पूर्णांक मूल्य चाहते हैं, तो यह भी जाँच के लायक हो सकता है intval($variable) !== FALSE


2
इसके अलावा, intval () कभी भी FALSE नहीं देता है।
जोश डेविस

1
यह पर्याप्त नहीं है क्योंकि '0' एक वैध स्ट्रिंग है लेकिन इसके लिए नहीं empty... isset/ filter_has_varका उपयोग यह देखने के लिए किया जाना चाहिए कि क्या var मौजूद है।
योषा अलाय्यूब


1

मैं यहां यह जांचने के लिए एक त्वरित तरीका ढूंढ रहा हूं कि क्या किसी चर में कोई सामग्री है। यहां कोई भी उत्तर पूर्ण समाधान प्रदान नहीं करता है, इसलिए यहां यह है:


यह जांचने के लिए पर्याप्त है कि इनपुट है ''या नहीं null, क्योंकि:

URL .../test.php?var=परिणामों का अनुरोध करें$_GET['var'] = ''

URL .../test.phpपरिणामों का अनुरोध करें$_GET['var'] = null


isset()रिटर्न falseकेवल जब चर मौजूद है और करने के लिए सेट नहीं है null, इसलिए यदि आप इसका इस्तेमाल करते हैं आप मिल जाएगा trueरिक्त स्ट्रिंग के लिए ( '')।

empty()दोनों को nullऔर ''खाली मानता है , लेकिन इसे '0'खाली भी मानता है, जो कुछ उपयोग मामलों में एक समस्या है।

यदि आप '0'खाली के रूप में व्यवहार करना चाहते हैं , तो उपयोग करें empty()। अन्यथा निम्नलिखित जांच का उपयोग करें:

$var .'' !== ''falseकेवल निम्नलिखित इनपुट के लिए मूल्यांकन करता है:

  • ''
  • null
  • false

मैं निम्नलिखित चेक का उपयोग केवल स्ट्रिंग्स और लाइन ब्रेक के साथ स्ट्रिंग्स को फ़िल्टर करने के लिए भी करता हूं:

function hasContent($var){
    return trim($var .'') !== '';
}

0

मैं नोटिस से बचने के लिए निम्नलिखित का उपयोग करता हूं, यह जांचता है कि यह संस्करण GET या POST पर घोषित किया गया है या @ उपसर्ग के साथ आप सुरक्षित रूप से जांच कर सकते हैं कि क्या खाली नहीं है और यदि सेट नहीं है तो नोटिस से बचें:

if( isset($_GET['var']) && @$_GET['var']!='' ){
    //Is not empty, do something
}

"Stfu ऑपरेटर" ( @) को प्रोत्साहित नहीं किया जाना चाहिए और यह आपके स्निपेट के लिए आवश्यक नहीं है। यह एक अच्छा जवाब नहीं है। आप एक ढीली तुलना कर रहे हैं। आप के रूप में अच्छी तरह से उपयोग कर सकते हैं !empty()
मिकमैकुसा

1
ऊ आदमी ... यह खराब कोडिंग उदाहरण के लिए बहुत अच्छा है। @आप डिबगिंग के साथ परेशानी में दे देंगे, पृष्ठ प्रभाव धीमा है और आप अभी भी error_logएक पल में 1GB से अधिक हो सकते हैं । बस होशियार और उपयोग !empty(), !is_null()या ऐसा कुछ।
इविज़न स्टीफन स्टिपिक

0

isset () का उपयोग यह जांचने के लिए किया जाता है कि चर मान के साथ सेट है या नहीं और Empty () का उपयोग यह जांचने के लिए किया जाता है कि दिया गया चर खाली है या नहीं।

isset () सही होता है जब चर शून्य नहीं होता है जबकि खाली () सही होता है यदि चर एक रिक्त स्ट्रिंग है।


0
    $var = '';
// 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';
    }

स्रोत: Php.net


0

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

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

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

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

<?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";
}
?>


0

खाली कर देगा। यदि आपको केवल जाँच करने की आवश्यकता है कि डेटा मौजूद है या नहीं, तो इस्सेट का उपयोग करें अन्य खाली अन्य मान्यताओं को संभाल सकते हैं

<?php
$array = [ "name_new" => "print me"];

if (!empty($array['name'])){
   echo $array['name'];
}

//output : {nothing}

////////////////////////////////////////////////////////////////////

$array2 = [ "name" => NULL];

if (!empty($array2['name'])){
   echo $array2['name'];
}

//output : {nothing}

////////////////////////////////////////////////////////////////////

$array3 = [ "name" => ""];

if (!empty($array3['name'])){
   echo $array3['name'];
}

//output : {nothing}  

////////////////////////////////////////////////////////////////////

$array4 = [1,2];

if (!empty($array4['name'])){
   echo $array4['name'];
}

//output : {nothing}

////////////////////////////////////////////////////////////////////

$array5 = [];

if (!empty($array5['name'])){
   echo $array5['name'];
}

//output : {nothing}

?>

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