2013-07-28 6 views
2

Je suis sûr que le tableau que je teste est nul. Même en faisant var_dump(array) imprime array(0) { }. Le test $this->assertNull($array); échoue cependant.
Au contraire, quand je test ci-dessous le code, il entre dans if état:PHPUnit test assertNull() échoue

if ($array == null) { 
    echo "Entered"; 
} else { 
    echo "Not Entered"; 
} 

Je ne comprends pas pourquoi il en est ainsi. S'il vous plaît expliquez-moi si quelqu'un sait la raison.

Répondre

4

array(0) { } est un tableau vide.

null serait l'absence d'un tableau du tout.

Ce ne sont pas la même chose.

Le problème avec == est qu'il essaie de taper les valeurs pour les faire correspondre. Un tableau vide est "falsy", tout comme null.

Si vous voulez voir la différence, utilisez plutôt ===, qui ne saisit pas jongler et compare également le type;

$array1 = null; 
$array2 = array(); 
if ($array1 == null) echo '1';  // $array1 is "similar to" null. 
if ($array1 === null) echo '2'; // $array1 is null 
if ($array2 == null) echo '3';  // $array2 is "similar to" null 
if ($array2 === null) echo '4'; // $array2 is null 

>>> 123 

More on the comparison operators here.

+0

Alors pourquoi 'if ($ array == null)' est satisfait. – Geek

+2

Parce qu'il est typecasting les valeurs pour les comparer. Essayez d'utiliser '$ array === null'. Et jetez un oeil à http://www.php.net/manual/en/types.comparisons.php pour voir ce que PHP compare. – Sven

+0

Merci pour l'exemple et l'explication. – Geek