114 votes

isset() et empty() - ce qu'il faut utiliser

Pourriez-vous m'aider à améliorer mon style de codage? :) Dans certaines tâches, je dois vérifier si une variable est vide ou contient quelque chose. Pour résoudre cette tâche, je fais généralement ce qui suit.

Vérifiez - cette variable est-elle définie ou non ? Si elle est définie, je vérifie si elle est vide ou non.

<?php
    $var = '23';
    if (isset($var)&&!empty($var)){
        echo 'not empty';
    }else{
        echo 'is not set or empty';
    }
?>

Et j'ai une question - dois-je utiliser isset() avant empty() - est-ce nécessaire ? TIA !

0 votes

Vide est !isset($var) || $var == false

3 votes

A mon avis, empty() est un développement horrible de PHP. Comme il considère "0" dans toutes les formes comme "vide", vous pouvez tomber dans de mauvais pièges qui vous feront perdre beaucoup de temps de débogage. Je dirais : évitez-le à tout prix et écrivez simplement la logique vous-même.

158voto

Pez Cuckow Points 5425

Cela dépend de ce que vous cherchez, si vous cherchez juste à savoir si le site est vide, utilisez simplement empty car il vérifie également s'il est défini, si vous voulez savoir si quelque chose est défini ou non, utilisez isset .

Empty vérifie si la variable est définie et si elle l'est, elle vérifie si elle est nulle, "", 0, etc.

Isset vérifie juste s'il est défini, il peut être n'importe quoi d'autre que null.

Avec empty les choses suivantes sont considérées comme vides :

  • "" (une chaîne vide)
  • 0 (0 comme un nombre entier)
  • 0.0 (0 comme un flotteur)
  • "0" (0 comme chaîne de caractères)
  • NULL
  • FAUX
  • array() (un tableau vide)
  • var $var ; (une variable déclarée, mais sans valeur dans une classe)

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


Comme mentionné dans les commentaires, l'absence d'avertissement est également importante avec empty().

Manuel PHP dit

empty() est l'opposé de (boolean) var, sauf qu'aucun Un avertissement est généré lorsque la variable n'est pas définie .

En ce qui concerne isset

Manuel PHP dit

isset() retournera FALSE si elle teste une variable qui a été mise à NULL.


Votre code serait parfait en tant que :

<?php
    $var = '23';
    if (!empty($var)){
        echo 'not empty';
    }else{
        echo 'is not set or empty';
    }
?>

Par exemple :

$var = "";

if(empty($var)) // true because "" is considered empty
 {...}
if(isset($var)) //true because var is set 
 {...}

if(empty($otherVar)) //true because $otherVar is null
 {...}
if(isset($otherVar)) //false because $otherVar is not set 
 {...}

14voto

deceze Points 200115

Dans votre cas particulier : if ($var) .

Vous devez utiliser isset si vous ne savez pas si la variable existe ou pas. Puisque vous l'avez déclaré sur la toute première ligne, vous savez qu'il existe, donc vous n'avez pas besoin de le faire, non, ne devrait pas utiliser isset .

Il en va de même pour empty seulement que empty combine également un chèque pour le véracité de la valeur. empty est équivalent à !isset($var) || !$var y !empty est équivalent à isset($var) && $var o isset($var) && $var == true .

Si vous voulez seulement tester une variable qui devrait exister para véracité , if ($var) est parfaitement adéquate et pertinente.

7voto

chris Points 1225

Vous pouvez simplement utiliser la fonction empty(), comme dans l'exemple suivant la documentation il retournera false si la variable n'a pas de valeur.

Un exemple sur cette même page :

<?php
$var = 0;

// Evaluates to true because $var is empty
if (empty($var)) {
    echo '$var is either 0, empty, or not set at all';
}

// Evaluates as true because $var is set
if (isset($var)) {
    echo '$var is set even though it is empty';
}
?>

Vous pouvez utiliser isset si vous voulez simplement savoir s'il n'est pas NULL. Sinon, il semble que empty() puisse être utilisé seul.

0 votes

Explication du vote négatif ? Il ne demande pas si c'est la même chose, il demande s'il doit vérifier isset avant de vérifier empty.

0 votes

Je n'ai pas rétrogradé, mais "utiliser isset si vous voulez savoir que ce n'est pas nul" n'est pas correct : $var = null; isset( $var ) == true .

0 votes

Extrait du Manuel PHP5/4 : isset() - "Détermine si une variable est définie et n'est pas NULL". us.php.net/manuel/fr/function.isset.php

2voto

dnagirl Points 11581

Voici les sorties de isset() y empty() pour les 4 possibilités : non déclaré, nul, faux et vrai.

$a=null;
$b=false;
$c=true;

var_dump(array(isset($z1),isset($a),isset($b),isset($c)),true); //$z1 previously undeclared
var_dump(array(empty($z2),empty($a),empty($b),empty($c)),true); //$z2 previously undeclared

//array(4) { [0]=> bool(false) [1]=> bool(false) [2]=> bool(true) [3]=> bool(true) } 
//array(4) { [0]=> bool(true) [1]=> bool(true) [2]=> bool(true) [3]=> bool(false) } 

Vous remarquerez que tous les résultats "isset" sont opposés aux résultats "empty". sauf pour le cas $b=false . Toutes les valeurs (à l'exception de null, qui n'est pas une valeur mais une non-valeur) qui valent false renvoient true lorsqu'elles sont testées par la fonction isset et faux lorsqu'il est testé par "empty".

Alors utilisez isset() lorsque l'on s'inquiète de l'existence d'une variable. Et utilisez empty quand vous testez le vrai ou le faux. Si le type réel de vide importe, utilisez is_null y ===0 , ===false , ==='' .

1voto

Whiskas Points 352

Empty retourne vrai si la var n'est pas définie. Mais isset renvoie vrai même si la var n'est pas vide.

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