2010-05-04 10 views
7

D'après ce que je sais PHP, la syntaxe suivante est pas juridique:comparaison de chaînes PHP sans guillemets

if ($s == Yes) 

Il devrait plutôt s'écrire:

if ($s == 'Yes') 

Cependant, la première exemple fonctionne très bien. Quelqu'un sait pourquoi?

+0

Toujours développer PHP avec tous les rapports d'erreur sur. Toutes les notifications invisibles ralentissent votre application et la rendent inutilisable pour les autres utilisateurs qui n'ont pas désactivé le rapport d'erreurs. –

Répondre

13

Habituellement, il serait interprété comme une constante, mais si PHP ne peut pas trouver une constante de ce nom, alors il suppose qu'il s'agit d'une chaîne littérale malgré l'absence de guillemets. Cela va générer un message E_NOTICE (qui peut ne pas être visible, en fonction de votre niveau de signalement d'erreur); quelque chose comme:

Avis: L'utilisation de constante indéfinie Oui - supposé 'Oui' dans script.php en ligne 3

Fondamentalement, PHP est juste trop clémente.

8

En résumé, PHP agit comme si les cotations étaient là.

Si PHP ne reconnaît pas quelque chose comme un jeton réservé, il le traite comme un littéral de chaîne.

Le journal des erreurs affichera un avertissement à ce sujet.

1

Le premier n'est pas une chaîne.

Et il fonctionne pas bien:

error_reporting(E_ALL); 
if ($s == Yes) {} 

Il est un héritage de l'époque où PHP étaient juste « Jolie page d'accueil » interprète forme et fortement découragée de nos jours.

0

En PHP, oui serait traité comme une constante. Si la constante n'est pas définie, vous supposerez que vous voulez dire la chaîne 'Oui'. Il devrait générer une notification si vous les avez activés.

1

Vous devez avoir à la fois error_reporting affichant les notifications et display_errors activé.

error_reporting(E_ALL | E_STRICT); 
ini_set('display_errors', '1'); 

if ($s == Yes) { 
    // foo 
} 
0

PHP convertit Oui à « Oui » à l'intérieur quand Oui constante se trouve pas à définir.

Btw .. Si ce que vous voulez comparer est si $ s a « Oui » comme valeur est une chaîne alors vous devez

a) utiliser strcmp ou b) utiliser l'opérateur d'identité « === "