2012-11-19 6 views
-3

Je me demande, pourquoi 'value' == value renvoie TRUE en PHP?Pourquoi 'value' == value retourne TRUE en PHP?

var_dump("value" == value); 

sortie est: bool(true)

+1

@Lucas (et Jack Maney) Cela ne fait aucune différence ici ... – KingCrunch

+0

devrait également afficher un avertissement lorsque 'value' n'est pas cité. – NappingRabbit

+0

duplicata possible de [Comment les opérateurs de comparaison d'égalité (== double égal) et d'identité (=== triple égal) sont différents?] (Http://stackoverflow.com/questions/80646/how-do-the-equality- double-equals-et-identity-triple-equals-comparis) –

Répondre

6

Vous devez utiliser === pour vérifier le type et truthiness

== contrôle simplement truthiness et "value" est tout aussi vrai que true dans ce contexte


Dans votre exemple si vous avez fait et non définir value dans votre portée - PHP va lancer un avertissement et utiliser "value" au lieu de value parce que c'est ce qu'il pense que vous vouliez utiliser.

A demo without the warning
A demo with warnings

+1

Votre explication est fausse: 'var_dump (" value "== val); // bool (false) ' – KingCrunch

+1

Conseils PHP de Stephen Colbert. Semble légitime. – Sammitch

+0

@KingCrunch ha! Je n'ai pas remarqué ça! – Neal

2

Vous devez augmenter le niveau error_reporting dans votre système de développement au moins E_NOTICE (mieux: E_ALL | E_STRICT, ou depuis 5.4 E_ALL est assez 8AS il couvre maintenant E_STRICT)). Dans ce cas, il vous dirait que la constante value n'existe pas et suppose que "value" est une chaîne. C'est une fonctionnalité héritée de PHP3 jours.

5

PHP évaluera les constantes non définies comme s'il s'agissait de chaînes. Normalement, il lance un avis. En tenant compte de cela, cette expression est vraie. Même avec une comparaison stricte, ce sera toujours vrai. var_dump(error === "error"); // true