Aujourd'hui seulement j'ai remarqué et j'ai découvert l'importance d'utiliser === Strong> Opérateur. Vous pouvez le voir dans l'exemple suivant: $var=0;
if ($var==false) echo "true"; else echo "false"; //prints true
$var=false;
if ($var==false) echo "true"; else echo "false"; //prints true
$var=0;
if ($var===false) echo "true"; else echo "false"; //prints false
$var=false;
if ($var===false) echo "true"; else echo "false"; //prints true
9 Réponses :
Le Considérez une situation lorsque vous comparez numéros ou chaînes EM>: p> === code> est Strict em> fort> comparaison de type opérateur, il ne vérifiera pas uniquement les valeurs
== code> seulement vérifie si les valeurs fortes> sont identiques.
if (4 === "4") // same value but different type
{
// false
}
Ouais, je savais ça. Mais je veux trouver des exemples où il est important d'utiliser un opérateur au lieu d'un autre.
Regardez la réponse de Felix Kling par exemple. Il a compris ce que je veux.
@Bakhtiyor: Comme vous pouvez le constater dans mon exemple, c'est aussi utile lorsque vous comparez des chiffres et des chaînes :)
Maintenant, je peux voir, mais quand vous commentant à vous répondre, il n'y avait pas d'exemples. Thx beaucoup par exemple.
Bien sûr, juste un exemple: array_search () code >
p>
AVERTISSEMENT FORT> P> Cette fonction peut retourner booléen
false code>, mais peut également renvoyer une valeur non booléenne qui évalue à
false code>, telle que
0 code> ou < code> "" code>. Veuillez lire la section sur Booleans pour plus d'informations. Utilisez l'opérateur
=== code> pour tester la valeur de retour de cette fonction. P> blockQuote>
Fondamentalement si vous utilisez une fonction que
renvoie une valeur sur le succès, mais false code> sur une panne forte>, vous devez vérifier le résultat avec
=== code> être sûr (sinon, pourquoi il y aurait une grosse boîte d'avertissement rouge?;)) p>
Exemples supplémentaires:
suivant () code>
,actuel () code>
ou comme mentionné également les fonctions de chaîne commeStros () code> a>,
stripos () code>
, etc. . p>même
substr () code>
bien que Il n'est pas mentionné explicitement: p>retourne la partie extraite de la chaîne ou false sur l'échec. P> blockQuote>
Mais si la partie extraite est
"0" code>? Il évalue également à
faux code>, mais ce n'est pas une erreur. P>
Suivant code> et
actuel code> ne sont pas de bons exemples. Et s'il y a false i> valeurs comme dans
array (faux) code>?
@Gumbo: C'est vrai. Je viens de les mentionner parce qu'ils ont également cette boîte d'avertissement dans leur documentation. Mais il y a une note (qui devrait être plus accentuée à l'OMHO): Remarque: vous ne pourrez pas distinguer la fin d'un tableau d'un faux élément booléen. Pour parcourir correctement un tableau pouvant contenir de faux éléments, voir la fonction chacune (). I>
Le C'est pourquoi === code> Opérateur vérifie le type ainsi que l'égalité de la valeur. P>
0 === false code> ne retourne pas vrai, car ils ne sont pas du même type. P>
in Stros () code>
Vous avez 0 lorsque la chaîne est trouvée et faux quand est mal saisissant. Vous devez utiliser === code> pour vérifier la différence. P>
J'ai récemment couru dans ce problème moi-même quand j'écrivais un analyseur de requête SQL rapide. Pour couper l'histoire courte, je comparais des paramètres cités avec leurs espaces réservés d'angle. Fondamentalement, le code suivant m'a conduit à certains temps de débogage dur (l'exemple est simplifié de manière simplifiée) Fondamentalement tout autre (==) $ somécontion code> finalement étant vrai tout le temps. frisson em> p>
Strows ($ aiguille, $ bitasetack) et les fonctions associées retourneront false si $ aiguille n'existe pas en $ haunstack, et 0 si $ aiguille est le premier caractère de $ Haystack; Et il y a toute une foule de fonctions similaires. En utilisant == peut vous donner des résultats incorrects dans ce cas, vous devez donc toujours utiliser ===. Le manuel identifie clairement où cela est nécessaire. P>
TOUJOURS choisir Considérez l'extrait de code suivant P> === code> sur
== code> sauf que vous êtes absolument sûr de besoin
== code>, car
== n'est pas transitif. Et cela est important pour votre raisonnement sur votre code.
$a = "0";
$b = 0;
$c = null;
Un bon exemple où vous pouvez avoir des problèmes, c'est comparer 0 et une chaîne, fx une chaîne ne commence pas par un numéro devient 0 code> lorsqu'il est converti en un int. Cela peut devenir un problème lors de la comparaison d'un statut pouvant être 0 à une chaîne. P> p>
Si vous comparez deux chaînes numériques, elles sont comparées comme des entiers. 1
$a = 0; $b = 'x'; var_dump(FALSE == $a); // TRUE var_dump($a == $b); // TRUE var_dump($b == TRUE); // TRUE var_dump(FALSE === $a); // FALSE var_dump($a === $b); // FALSE var_dump($b === TRUE); // FALSE
Vous pouvez simplement dire
echo $ var == faux; code> etc.
Voir Stackoverflow.com/questions/1117967/What-Does-Mean
@Chris. J'ai déjà examiné cette question. Mais ma question concerne des exemples, où il est vraiment important d'envisager d'utiliser l'opérateur "===", pas "==" Opérateur.
@Skilldrick: Non, vous ne pouvez pas. PHP ne convertit pas automatiquement les valeurs booléennes en "True" / "False" Strings. Votre exemple produirait soit
1 code> (pour
true code>) ou la chaîne vide (pour
false code>). Les exemples pourraient être raccourcis, cependant, en utilisant l'opérateur ternaire, comme:
Imprimer ($ var == faux)? 'vrai': 'faux'; code>.
@Jakob: assez juste! Bon point.
Un de mes pépins d'animaux en PHP, au fait. Il rend un débogage rapide et sale tellement moins rapide et bien plus sale, quand tout ce que vous voulez, c'est pour
impression true code> pour réellement impression i> true.