289 votes

Pourquoi vérifier à la fois isset() et !empty() ?

Y a-t-il une différence entre isset y !empty . Si je fais cette double vérification booléenne, est-ce correct de cette manière ou redondant ? et existe-t-il une manière plus courte de faire la même chose ?

isset($vars[1]) AND !empty($vars[1])

3 votes

Il y a un beau tableau sur les résultats de leur utilisation avec différents types de variables (ils ont des différences) ici : virendrachandak.com/demos/php-isset-vs-empty-vs-is_null.php

0 votes

Les compléments exacts évidents sont isset et is_null, mais !empty en couvre plusieurs autres. Tout dépend du type de données que vous testez.

445voto

deceze Points 200115

C'est complètement redondant. empty est plus ou moins un raccourci pour !isset($foo) || !$foo y !empty est analogue à isset($foo) && $foo . I.e. empty fait la chose inverse de isset plus un contrôle supplémentaire pour le véracité d'une valeur.

Ou en d'autres termes, empty est la même chose que !$foo mais n'envoie pas d'avertissement si la variable n'existe pas. C'est l'objectif principal de cette fonction : effectuer une comparaison booléenne sans se préoccuper de l'existence de la variable.

Le manuel le dit comme ça :

empty() est le contraire 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.

11 votes

Mais alors, s'il n'y a pas $vars[1] il recevra un avis.

6 votes

Je ne sais pas d'où me vient cette idée. Plus un.

10 votes

@karim IMO empty est l'une des fonctions les plus méconnues de PHP. Le petit bout de phrase "aucun avertissement n'est généré" est très facile à ignorer. J'ai dû moi-même parcourir la documentation plusieurs fois pour le repérer et le poster ici.

33voto

GreenMatt Points 6301

isset() teste si une variable est définie et non nulle :

http://us.php.net/manual/en/function.isset.php

empty() peut renvoyer la réponse vraie lorsque la variable prend certaines valeurs :

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

Pour le démontrer, essayez le code suivant avec $the_var non assignée, définie à 0, et définie à 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";
}
?>

8voto

rajmohan Points 857
$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';
}

1 votes

Mais vous n'avez pas traité le cas de la variable non fixée.

3voto

Breezer Points 4203

Empty vérifie simplement si la variable/le tableau référencé a une valeur si vous vérifiez le paramètre php doc(empty) 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)

alors que isset vérifie si la variable est isset et non nulle, ce qui peut également être trouvé dans le fichier php doc(isset)

0voto

szahn Points 18

"Empty" : ne fonctionne que sur les variables. Empty 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 valeur vraie NULL ou fausse. Peut être désactivée en appelant "unset". 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.

3 votes

@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, alors vous pouvez être redondant en tant que programmeur.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X