C'è una differenza tra issete !empty. Se eseguo questo doppio controllo booleano, è corretto in questo modo o ridondante? e c'è un modo più breve per fare la stessa cosa?
isset($vars[1]) AND !empty($vars[1])
C'è una differenza tra issete !empty. Se eseguo questo doppio controllo booleano, è corretto in questo modo o ridondante? e c'è un modo più breve per fare la stessa cosa?
isset($vars[1]) AND !empty($vars[1])
Risposte:
Questo è completamente ridondante. emptyè più o meno una scorciatoia per !isset($foo) || !$fooed !emptyè analogo a isset($foo) && $foo. Vale a dire emptyil contrario di issetun controllo aggiuntivo per la verità di un valore.
O in altre parole, emptyè uguale a !$foo, ma non genera avvisi se la variabile non esiste. Questo è il punto principale di questa funzione: fai un confronto booleano senza preoccuparti della variabile impostata.
Il manuale lo mette così:
empty()è l'opposto di(boolean) var, tranne per il fatto che non viene generato alcun avviso quando la variabile non è impostata.
Puoi semplicemente usare !empty($vars[1])qui.
$vars[1]sarà riceverà un avviso.
emptyè una delle funzioni più incomprese in PHP. Il piccolo frammento di "nessun avviso generato" è molto facile da trascurare. Ho dovuto scansionare la documentazione da solo alcune volte per individuarla per pubblicarla qui.
empty($vars[1])non causa alcun avviso, anche $vars[1]se non è impostato, ma lo echo $vars[1]farà. Ho verificato il fatto usando echo $vars[1]; if (!empty($vars[1])) echo 1; else echo 0;.
0come false. PHP non è l'unico. Non sei ancora sicuro di quale sia il tuo reclamo.
isset() verifica se è impostata una variabile e non è nulla:
http://us.php.net/manual/en/function.isset.php
empty() può restituire true quando la variabile è impostata su determinati valori:
http://us.php.net/manual/en/function.empty.php
Per dimostrarlo, prova il codice seguente con $ the_var non assegnato, impostato su 0 e impostato su 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";
}
?>
La risposta accettata non è corretta.
isset () NON equivale a! empty ().
Se segui questa strada, creerai alcuni bug piuttosto spiacevoli e difficili da eseguire il debug. ad esempio, provare a eseguire questo codice:
<?php
$s = '';
print "isset: '" . isset($s) . "'. ";
print "!empty: '" . !empty($s) . "'";
?>
issetsia equivalente a !empty.
$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';
}
Vuoto basta controllare se la variabile / matrice di riferimento ha un valore se controlli il documento php (vuoto) vedrai che queste cose sono considerate 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)
mentre isset controlla se la variabile isset e non null che può anche essere trovata nel documento php (isset)
Non è necessario.
Non viene generato alcun avviso se la variabile non esiste. Ciò significa che empty () è essenzialmente l'equivalente conciso di! Isset ($ var) || $ var == false.
isset($vars[1]) AND !empty($vars[1])è equivalente a !empty($vars[1]).
Ho preparato un codice semplice per mostrarlo empiricamente.
L'ultima riga è una variabile non definita.
+-----------+---------+---------+----------+---------------------+
| 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 |
+-----------+---------+---------+----------+---------------------+
E codice
$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");
La variabile non definita deve essere valutata al di fuori della funzione, poiché la funzione stessa crea una variabile temporanea nell'ambito stesso.
"Vuoto": funziona solo su variabili. Vuoto può significare cose diverse per diversi tipi di variabili (consultare il manuale: http://php.net/manual/en/function.empty.php ).
"isset": controlla se la variabile esiste e controlla un vero valore NULL o falso. Può essere disinserito chiamando "unset". Ancora una volta, controlla il manuale.
L'uso di uno dei due dipende dal tipo di variabile che si sta utilizzando.
Direi che è più sicuro controllare entrambi, perché stai verificando innanzitutto se la variabile esiste e se non è NULL o vuota.
se utilizziamo la stessa pagina per aggiungere / modificare tramite il pulsante Invia come di seguito
<input type="hidden" value="<?echo $_GET['edit_id'];?>" name="edit_id">
quindi non dovremmo usare
isset($_POST['edit_id'])
bcoz edit_idè sempre impostato indipendentemente dal fatto che si tratti di aggiungere o modificare la pagina, invece dovremmo usare la verifica sotto la condizione
!empty($_POST['edit_id'])
empty()funzione:Restituisce FALSEse varha un valore non vuoto e diverso da zero.
Questa è una buona cosa da sapere. In altre parole, tutto da NULL, a 0a "" tornerà TRUEquando si utilizza la empty()funzione.
isset()restituisce la funzione:Restituisce TRUEse varesiste; FALSEaltrimenti.
In altre parole, solo le variabili che non esistono (o le variabili con NULLvalori rigorosamente ) restituiranno FALSEla isset()funzione. 0Verranno restituite tutte le variabili che hanno qualsiasi tipo di valore, sia esso una stringa di testo vuota, ecc TRUE.