Duplicate possible:
Quelle est la différence entre is_null ($ var) et ($ var === null)?
PHP a deux méthodes (à ma connaissance et trois si vous comptez isset()
) pour déterminer si une valeur est nulle: is_null()
et === null
. J'ai entendu, mais je n'ai pas confirmé, que === null
Est plus rapide, mais dans une révision de code, quelqu'un m'a fortement suggéré d'utiliser is_null()
à la place car il est spécifiquement conçu à des fins d'évaluation null. Il a également commencé à parler de mathématiques ou de quelque chose du genre.
Quoi qu'il en soit, le fait que is_null()
soit apparemment plus lent, me porte également à croire que le résultat est supérieur à celui de === null
Et est probablement préféré. Y a-t-il une raison d'utiliser l'un ou l'autre? Est-ce qu'on préfère toujours? Qu'en est-il de isset()
?
En tant qu'additif pour ne pas éventuellement résoudre cette question, qu'en est-il de isset()
vs is_null()
? Il semble que tout ce que isset()
fera est de supprimer la notification. Ainsi, sauf si vous voulez une notification pour une variable non définie, toute raison d'utiliser is_null()
au lieu? Que diriez-vous si vous savez que la variable est initialisée à ce moment?
Enfin, y a-t-il une raison mathématique de préférer is_null()
à === null
? Quelque chose à propos de null ne pas être comparable?
Il y a absolument pas la différence de fonctionnalités entre is_null
Et === null
.
La seule différence est que is_null
Est une fonction et donc
array_map('is_null', $array)
.Personnellement, j'utilise null ===
Chaque fois que je peux, car cela est plus cohérent avec les contrôles false ===
Et true ===
.
Si vous le souhaitez, vous pouvez vérifier le code: is_identical_function
(===
) Et php_is_type
(is_null
) fait la même chose pour le cas IS_NULL
.
La structure de langage associée isset()
vérifie si la variable existe réellement avant d'effectuer la vérification null
. Donc, isset($undefinedVar)
ne lancera pas d’avis.
Notez également que isset()
peut parfois renvoyer true
même si la valeur est null
- c'est le cas lorsqu'il est utilisé sur un objet surchargé, c'est-à-dire si l'objet définit offsetExists
/__isset
méthode qui retourne true
même si l'offset est null
(c'est en fait assez courant, car les gens utilisent array_key_exists
dans offsetExists
/__isset
).
Comme indiqué par d'autres, il existe un décalage horaire entre l'utilisation de ===
Et is_null()
. J'ai fait quelques tests rapides et obtenu ces résultats:
<?php
//checking with ===
$a = array();
$time = microtime(true);
for($i=0;$i<10000;$i++) {
if($a[$i] === null) {
//do nothing
}
}
echo 'Testing with === ', microtime(true) - $time, "\n";
//checking with is_null()
$time = microtime(true);
for($i=0;$i<10000;$i++) {
if(is_null($a[$i])) {
//do nothing
}
}
echo 'Testing with is_null() ', microtime(true) - $time;
?>
Donne les résultats
Test avec === 0.0090668201446533
Test avec is_null () 0.013684034347534
Ils ont tous leur place, bien que seul isset () évite les avertissements de variable non définis:
$ php -a
Interactive Shell
php > var_dump(is_null($a));
PHP Notice: Undefined variable: a in php Shell code on line 1
bool(true)
php > var_dump($a === null);
PHP Notice: Undefined variable: a in php Shell code on line 1
bool(true)
php > var_dump(isset($a));
bool(false)
php >
Vous avez besoin de isset()
si la variable n'est peut-être pas définie. Il renvoie false lorsque la variable n'est pas définie ou === null
(Oui, c'est ça moche). Seuls isset()
et empty()
ne déclenchent pas un E_NOTICE si la variable ou l'élément de tableau n'existe pas.
Il n'y a pas vraiment de différence entre is_null
Et === null
. Je pense que ===
Est bien meilleur, mais quand vous par exemple Si vous devez utiliser call_user_func
pour une raison douteuse, vous devrez utiliser is_null
.
Je ne suis pas en mesure de dire s'il vaut mieux utiliser is_null
Ou === null
. Mais soyez conscient lorsque vous utilisez isset
sur des tableaux.
$a = array('foo' => null);
var_dump(isset($a['foo'])); // false
var_dump(is_null($a['foo'])); // true
var_dump(array_key_exists('foo', $a)); // true
===
et is_null
est le même.
Selon ce commentaireis_null
n'est que 250ns plus lent. Je pense qu'une fonction est plus lente qu'un opérateur.
Le documentation PHP a une bonne discussion et des expériences sur is_null, === null, isset
. Surtout lisez la section commentaire.