isset () e empty () - cosa usare


105

Potresti aiutarmi a migliorare il mio stile di codifica? :) In alcune attività devo controllare - la variabile è vuota o contiene qualcosa. Per risolvere questo compito, di solito faccio quanto segue.

Verifica: questa variabile è impostata o no? Se è impostato - controllo - è vuoto o no?

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

E ho una domanda - dovrei usare isset () prima di empty () - è necessario? TIA!


vuoto è! isset ($ var) || $ var == false
zloctb

2
nella mia opinione empty () è uno sviluppo orribile di PHP. Poiché considera "0" in qualsiasi forma "vuoto", potresti cadere in cattive trappole che costano molto tempo per il debugging. Direi: evita a tutti i costi e scrivi tu stesso la logica
Giovanni

Risposte:


143

Dipende da cosa stai cercando, se stai solo cercando di vedere se è vuoto empty, usalo perché controlla se è impostato, se vuoi sapere se qualcosa è impostato o non usa isset.

Empty controlla se la variabile è impostata e se lo è controlla per null, "", 0, ecc

Isset controlla solo se è impostato, potrebbe essere qualsiasi cosa non nulla

Con empty, le seguenti cose sono considerate vuote:

  • "" (una stringa vuota)
  • 0 (0 come numero intero)
  • 0,0 (0 come un galleggiante)
  • "0" (0 come stringa)
  • NULLO
  • FALSE
  • array () (un array vuoto)
  • var $ var; (una variabile dichiarata, ma senza valore in una classe)

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


Come accennato nei commenti la mancanza di avviso è importante anche con empty ()

Dice il manuale PHP

empty () è l'opposto di (boolean) var, tranne per il fatto che non viene generato alcun avviso quando la variabile non è impostata .

Per quanto riguarda isset

Dice il manuale PHP

isset () restituirà FALSE se si prova una variabile che è stata impostata su NULL


Il tuo codice andrebbe bene come:

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

Per esempio:

$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 
 {...}

Significa che nel codice sopra controllo se la variabile è impostata o non due volte? :)
Dmitry Belaventsev

Controlla solo se è vuoto, php non genererà un errore se questo non è il caso.
Pez Cuckow

3
Stai omettendo il punto più importante di empty: non genera un avviso quando la variabile testata non esiste. Questo è il punto centrale di questa funzione, altrimenti è identico a == false.
inganno

1
Quindi, il fatto nel manuale che "non viene generato alcun avviso quando la variabile non è impostata" mi ha confuso. Nessun avviso non significa che non avrò problemi con il codice sottostante. Adesso è chiaro per me. Grazie mille!
Dmitry Belaventsev

"isset controlla solo se è impostato, potrebbe ancora essere nullo" Non è vero: issetsu una variabile nulla (ed esistente) restituirà false.
netcoder

12

Nel tuo caso particolare: if ($var).

È necessario utilizzare issetse non si sa se la variabile esiste o meno. Dato che lo hai dichiarato nella primissima riga, sai che esiste, quindi non è necessario, anzi, non dovresti usare isset.

Lo stesso vale per empty, solo che emptycombina anche un controllo della veridicità del valore. emptyè equivalente a !isset($var) || !$vared !emptyè equivalente a isset($var) && $var, o isset($var) && $var == true.

Se vuoi solo testare una variabile che dovrebbe esistere per la verità , if ($var)è perfettamente adeguata e al punto.


Questo spiega molto molto meglio. Se otteniamo un confronto per tutti gli altri casi come questo !empty is equivalent to isset($var) && $var, sarebbe fantastico. Grazie @deceze
Vir

6

Puoi semplicemente usare empty () - come visto nella documentazione , restituirà false se la variabile non ha valore.

Un esempio sulla stessa pagina:

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

Puoi usare isset se vuoi solo sapere se non è NULL. Altrimenti sembra che empty () vada bene da usare da solo.


Spiegazione per il voto negativo? Non sta chiedendo se sono uguali, sta chiedendo se ha bisogno di controllare isset prima di controllare vuoto.
chris

Non ho downvote, ma "l'uso isset se si vuole sapere che non è nulla" non è corretta: $var = null; isset( $var ) == true.
JJJ

Dal manuale PHP5 / 4: isset () - "Determina se una variabile è impostata e non è NULL." us.php.net/manual/en/function.isset.php
chris

2

Ecco gli output di isset()e empty()per le 4 possibilità: non dichiarato, nullo, falso e vero.

$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) } 

Noterai che tutti i risultati "isset" sono opposti ai risultati "vuoti" tranne maiuscole e minuscole $b=false. Tutti i valori (eccetto null che non è un valore ma un non valore) che restituiscono false restituiranno true se testati da issete false se testati da "vuoto".

Quindi usalo isset()quando sei preoccupato per l'esistenza di una variabile. E usalo emptyquando stai testando vero o falso. Se il tipo effettivo di questioni vuoto, l'uso is_nulle ===0, ===false, ===''.


1

Vuoto restituisce vero se la variabile non è impostata. Ma isset restituisce true anche se la variabile non è vuota.


-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
   }
}

Questo è un semplice esempio. Spero che sia d'aiuto.

modifica: aggiunta issetnel caso in cui una variabile non sia definita come sopra, causerebbe un errore, controllare per vedere se la sua prima impostazione almeno aiuterà a rimuovere qualche mal di testa lungo la strada.


7
strlen sotto zero? Voglio vedere quella stringa.
ingannare

@deceze Solo un esempio approssimativo :) OK, usa = 0 non <0
Akos
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.