isset () e empty () – che cosa usare

Possibile duplicato:
Perché controllare sia isset () che! Empty ()

Potresti aiutarmi a migliorare il mio stile di codifica? 🙂 In alcune attività ho bisogno di controllare – è una variabile vuota o contiene qualcosa. Per risolvere questo task, di solito faccio quanto segue.

Verifica: questa variabile è impostata o no? Se è impostato – I check – è 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!

Dipende da ciò che stai cercando, se stai solo cercando di vedere se è vuoto usa solo empty in quanto controlla se è impostato, se vuoi sapere se qualcosa è impostato o less usa isset .

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

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

Con empty , le seguenti cose sono considerate vuote:

  • "" (una string vuota)
  • 0 (0 come numero integer)
  • 0.0 (0 come un galleggiante)
  • "0" (0 come string)
  • NULLO
  • FALSE
  • arrays () (una matrix vuota)
  • var $ var; (una variabile dichiarata, ma senza un valore in una class)

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


Come menzionato nei commenti, la mancanza di avviso è importnte anche con empty ()

Il manuale PHP dice

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

Il manuale PHP dice

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

Nel tuo caso particolare: if ($var) .

Devi usare isset se non sai se la variabile esiste o less. Dal momento che lo hai dichiarato sulla prima row, sai che esiste, quindi non è necessario, anzi, non dovrebbe usare isset .

Lo stesso vale per empty , solo che empty combina anche un controllo per la verità del valore. empty è equivalente a !isset($var) || !$var !isset($var) || !$var e !empty equivale a isset($var) && $var , o isset($var) && $var == true .

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

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

Un esempio su quella 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 vuoto () va bene da usare da solo.

Empty restituisce true se var non è impostato. Ma isset restituisce true anche se var non è vuoto.

Ecco gli output di isset() e empty() per le 4 possibilità: non dichiarata, nulla, falsa e vera.

 $a=null; $b=false; $c=true; var_dump(arrays(isset($z1),isset($a),isset($b),isset($c)),true); //$z1 previously undeclared var_dump(arrays(empty($z2),empty($a),empty($b),empty($c)),true); //$z2 previously undeclared //arrays(4) { [0]=> bool(false) [1]=> bool(false) [2]=> bool(true) [3]=> bool(true) } //arrays(4) { [0]=> bool(true) [1]=> bool(true) [2]=> bool(true) [3]=> bool(false) } 

Noterai che tutti i risultati di "isset" sono opposti rispetto ai risultati "vuoti" ad exception del caso $b=false . Tutti i valori (eccetto null che non è un valore ma un non valore) che valutano in false restituiranno true se testato da isset e falso se testato da 'vuoto'.

Quindi usa isset() quando sei preoccupato dell'esistenza di una variabile. E usa empty quando stai testando per vero o falso. Se il tipo effettivo di vuoto conta, usa is_null e ===0 , ===false , ==='' .

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

edit: aggiunto isset nel caso in cui una variabile non sia definita come sopra, causerebbe un errore, verificando se il suo primo set minimizzasse il mal di testa.