Y a-t-il une différence entre isset
et !empty
. Si je fais cette double vérification booléenne, est-ce correct ou redondant? et existe-t-il un moyen plus court de faire la même chose?
isset($vars[1]) AND !empty($vars[1])
Y a-t-il une différence entre isset
et !empty
. Si je fais cette double vérification booléenne, est-ce correct ou redondant? et existe-t-il un moyen plus court de faire la même chose?
isset($vars[1]) AND !empty($vars[1])
Réponses:
C'est complètement redondant. empty
est plus ou moins un raccourci !isset($foo) || !$foo
et !empty
est analogue à isset($foo) && $foo
. C'est à dire empty
l'inverse de isset
plus une vérification supplémentaire de la véracité d'une valeur.
Ou en d'autres termes, empty
est identique à !$foo
, mais ne lance pas d'avertissement si la variable n'existe pas. C'est le point principal de cette fonction: faire une comparaison booléenne sans se soucier de la variable définie.
Le manuel le dit comme ceci:
empty()
est l'opposé de(boolean) var
, sauf qu'aucun avertissement n'est généré lorsque la variable n'est pas définie.
Vous pouvez simplement utiliser !empty($vars[1])
ici.
$vars[1]
il recevra un avis.
empty
est l'une des fonctions les plus mal comprises de PHP. Le petit extrait sur "aucun avertissement n'est généré" est très facile à ignorer. J'ai dû numériser moi-même la documentation plusieurs fois pour la repérer et la publier ici.
empty($vars[1])
ne provoque aucun avertissement même $vars[1]
n'est pas défini, mais le echo $vars[1]
sera. J'ai vérifié le fait en utilisant echo $vars[1]; if (!empty($vars[1])) echo 1; else echo 0;
.
0
comme false
. PHP n'est pas le seul. Je ne sais toujours pas quelle est votre plainte.
isset()
teste si une variable est définie et non nulle:
http://us.php.net/manual/en/function.isset.php
empty()
peut renvoyer true lorsque la variable est définie sur certaines valeurs:
http://us.php.net/manual/en/function.empty.php
Pour illustrer cela, essayez le code suivant avec $ the_var non affecté, défini sur 0 et défini sur 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 réponse acceptée n'est pas correcte.
isset () N'EST PAS équivalent à! empty ().
Vous créerez des bogues plutôt désagréables et difficiles à déboguer si vous suivez cette voie. par exemple, essayez d'exécuter ce code:
<?php
$s = '';
print "isset: '" . isset($s) . "'. ";
print "!empty: '" . !empty($s) . "'";
?>
isset
équivaut à !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';
}
Videz juste vérifiez que la variable / le tableau référencé a une valeur si vous vérifiez le doc php (vide) vous verrez que ces choses sont considérées comme 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)
tandis que isset vérifie si la variable isset et non null qui peut également être trouvée dans le doc php (isset)
Ce n'est pas nécessaire.
Aucun avertissement n'est généré si la variable n'existe pas. Cela signifie que empty () est essentiellement l'équivalent concis de! Isset ($ var) || $ var == false.
isset($vars[1]) AND !empty($vars[1])
est équivalent à !empty($vars[1])
.
J'ai préparé un code simple pour le montrer empiriquement.
La dernière ligne est une variable non définie.
+-----------+---------+---------+----------+---------------------+
| 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 |
+-----------+---------+---------+----------+---------------------+
Et le code
$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 variable non définie doit être évaluée en dehors de la fonction, car la fonction elle-même crée une variable temporaire dans la portée elle-même.
"Vide": ne fonctionne que sur les variables. Vide peut signifier différentes choses pour différents types de variables (consultez le manuel: http://php.net/manual/en/function.empty.php ).
"isset": vérifie si la variable existe et recherche une vraie valeur NULL ou fausse. Peut être annulé en appelant "annulé". Encore une fois, consultez le manuel.
L'utilisation de l'un ou l'autre dépend du type de variable que vous utilisez.
Je dirais qu'il est plus sûr de vérifier les deux, car vous vérifiez d'abord si la variable existe et si elle n'est pas vraiment NULL ou vide.
si nous utilisons la même page pour ajouter / modifier via le bouton de soumission comme ci-dessous
<input type="hidden" value="<?echo $_GET['edit_id'];?>" name="edit_id">
alors nous ne devrions pas utiliser
isset($_POST['edit_id'])
bcoz edit_id
est défini tout le temps, qu'il s'agisse d'ajouter ou de modifier une page, à la place, nous devons utiliser la condition de vérification ci-dessous
!empty($_POST['edit_id'])
empty()
fonction:Renvoie FALSE
sivar
a une valeur non vide et non nulle.
C'est une bonne chose à savoir. En d'autres termes, tout de NULL
, à 0
à "" sera renvoyé TRUE
lors de l'utilisation de la empty()
fonction.
isset()
fonction retourne:Renvoie TRUE
s'il var
existe;FALSE
autrement.
En d'autres termes, seules les variables qui n'existent pas (ou les variables ayant strictement des NULL
valeurs) retourneront FALSE
sur la isset()
fonction. Toutes les variables qui ont n'importe quel type de valeur, que ce soit 0
, une chaîne de texte vierge, etc. retourneront TRUE
.