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?
Les compléments exacts évidents sont isset et is_null, mais! Empty en recouvre plusieurs différents. Tout dépend du type de données que vous testez.
Jeff Clayton
Réponses:
420
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.
Je n'ai aucune idée d'où j'ai eu cette idée. Plus un.
karim79
8
@karim IMO 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.
décomposer
2
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;.
Amil Waduwawara
4
@Shahor De nombreuses langues considèrent 0comme false. PHP n'est pas le seul. Je ne sais toujours pas quelle est votre plainte.
décomposition
33
isset() teste si une variable est définie et non nulle:
La réponse acceptée ne suggère aucunement que cela issetéquivaut à !empty.
décomposer
8
$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';}
Mais vous n'avez pas géré de variable pas de casse.
Amil Waduwawara
3
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(0as an integer)*"0"(0as a string)* NULL
* FALSE
* array()(an empty array)*var $var;(a variable declared, but without a valuein 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)
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.
Cela n'a jamais été nécessaire sur aucune version PHP, car vide vérifie déjà (pas) isset. Vous confondez le fait que vide prend désormais en charge les expressions avec la question.
alxgb
Ce n'est vrai que cinq ans plus tard.
Lennon
2
isset($vars[1]) AND !empty($vars[1])est équivalent à !empty($vars[1]).
J'ai préparé un code simple pour le montrer empiriquement.
"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.
@szahn "plus sûr de vérifier les deux", - en tant que programmeur, vous pouvez vérifier tout ce que vous voulez pour la sécurité. Mais si votre code est redondant, vous pouvez être redondant en tant que programmeur.
madlopt
0
si nous utilisons la même page pour ajouter / modifier via le bouton de soumission comme ci-dessous
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
le post précédent a été soumis bcoz j'ai appuyé sur enter par erreur, voici ma réponse complète ... pourquoi downvote? :(
diEcho
0
Depuis le site Web PHP, en se référant à la 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.
Voici la description de ce que la 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.
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 à direempty
l'inverse deisset
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:
Vous pouvez simplement utiliser
!empty($vars[1])
ici.la source
$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 leecho $vars[1]
sera. J'ai vérifié le fait en utilisantecho $vars[1]; if (!empty($vars[1])) echo 1; else echo 0;
.0
commefalse
. 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.
la source
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:
https://3v4l.org/J4nBb
la source
isset
équivaut à!empty
.la source
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
tandis que isset vérifie si la variable isset et non null qui peut également être trouvée dans le doc php (isset)
la source
Ce n'est pas nécessaire.
php.net
la source
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.
Et le code
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.
la source
"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.
la source
si nous utilisons la même page pour ajouter / modifier via le bouton de soumission comme ci-dessous
alors nous ne devrions pas utiliser
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-dessousla source
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 laempty()
fonction.isset()
fonction retourne:Renvoie
TRUE
s'ilvar
existe;FALSE
autrement.En d'autres termes, seules les variables qui n'existent pas (ou les variables ayant strictement des
NULL
valeurs) retournerontFALSE
sur laisset()
fonction. Toutes les variables qui ont n'importe quel type de valeur, que ce soit0
, une chaîne de texte vierge, etc. retournerontTRUE
.la source