Y a-t-il une différence entre issetet !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 issetet !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. emptyest plus ou moins un raccourci !isset($foo) || !$fooet !emptyest analogue à isset($foo) && $foo. C'est à dire emptyl'inverse de issetplus une vérification supplémentaire de la véracité d'une valeur.
Ou en d'autres termes, emptyest 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.
emptyest 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;.
0comme 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_idest 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 FALSEsivar a une valeur non vide et non nulle.
C'est une bonne chose à savoir. En d'autres termes, tout de NULL, à 0à "" sera renvoyé TRUElors de l'utilisation de la empty()fonction.
isset()fonction retourne:Renvoie TRUEs'il varexiste;FALSEautrement.
En d'autres termes, seules les variables qui n'existent pas (ou les variables ayant strictement des NULLvaleurs) retourneront FALSEsur 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.