==
et !=
ne tiennent pas compte du type de données des variables que vous comparez. Elles renvoient donc toutes à vrai :
'0' == 0
false == 0
NULL == false
===
et !==
faire prennent en compte le type de données. Cela signifie que la comparaison d'une chaîne de caractères avec un booléen sera jamais être vrai parce qu'ils sont de types différents, par exemple. Ils retourneront tous false :
'0' === 0
false === 0
NULL === false
Vous devez comparer les types de données pour les fonctions qui renvoient des valeurs qui pourraient éventuellement avoir une valeur véridique/falsifiée ambiguë. Un exemple bien connu est strpos()
:
// This returns 0 because F exists as the first character, but as my above example,
// 0 could mean false, so using == or != would return an incorrect result
var_dump(strpos('Foo', 'F') != false); // bool(false)
var_dump(strpos('Foo', 'F') !== false); // bool(true), it exists so false isn't returned
1 votes
Duplicata possible de En quoi les opérateurs de comparaison PHP égalité (== double égal) et identité (=== triple égal) diffèrent-ils ?