89 votes

Quelle est la différence entre is_null($var) et ($var === null) ?

Les gourous du PHP de StackOverflow...

Y a-t-il une différence entre ce...

if (is_null($var)) {
    do_something();
}

et ça ?

if ($var === null) {
    do_something();
}

Quelle forme est la meilleure pour vérifier si une variable contient ou non des nullités ? Y a-t-il des cas limites dont je devrais être conscient ? (J'initialise toutes mes variables, donc les variables inexistantes ne sont pas un problème).

107voto

PHPst Points 2929
        isset  is_null ===null  ==null  empty
 null |   F   |   T   |   T   |   T   |   T   |
 true |   T   |   F   |   F   |   F   |   F   |
false |   T   |   F   |   F   |   T   |   T   |
    0 |   T   |   F   |   F   |   T   |   T   |
    1 |   T   |   F   |   F   |   F   |   F   |
   \0 |   T   |   F   |   F   |   F   |   F   |
unset |   F   |   T   |   T   |   T   |   T   |
  ""  |   T   |   F   |   F   |   T   |   T   |
  []  |   T   |   F   |   F   |   T   |   T   |

résumé :

  • empty est équivalent à : ==null
  • is_null est équivalent à : ===null
  • isset est l'inverse de is_null et ===null

33voto

Craige Points 1368

À condition que la variable soit initialisée (ce que vous avez indiqué - bien que je ne sois pas sûr à 100% que cela soit important ou non dans ce contexte. Les deux solutions peuvent générer un avertissement si la variable n'est pas définie), elles sont fonctionnellement identiques. Je présume que === serait cependant un peu plus rapide, car elle supprime la surcharge d'un appel de fonction.

Cela dépend vraiment de la façon dont vous considérez votre état.

=== est pour une comparaison stricte des données. NULL n'a qu'une seule "valeur", donc cela fonctionne pour la comparaison avec NULL (qui est une constante PHP de la "valeur" nulle).

is_null vérifie que la variable est de type NULL.

C'est à vous de choisir ce que vous voulez.

18voto

ish1301 Points 6724

Les deux sont exactement les mêmes, j'utilise is_null parce que cela rend mon code plus lisible

7voto

goat Points 17643

S'il semble redondant pour php d'avoir autant de fonctions de type is_foo(), alors que vous pouvez simplement utiliser des opérateurs de comparaison standard, envisagez des fonctions appelées par programme.

$arrayOfNullValues = array_filter($myArray, 'is_null');

5voto

lonesomeday Points 95456

Je viens d'effectuer un benchmark rapide, en testant un million d'itérations de chacun. is_null a pris 8 secondes pour se terminer ; === null a pris 1.

Donc un appel à is_null est 0.000007s plus lent qu'un appel à === sur mon ordinateur.

Je trouverais quelque chose de plus utile à optimiser.


Mon code :

<?php

$start = time();
$var = null;

for ($i = 1000000; $i--; ) {
    is_null($var);
}

echo time() - $start;

$start = time();

for ($i = 1000000; $i--; ) {
    $var === null;
}

echo time() - $start;

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