7
votes

Comparaison de chaîne PHP sans guillemets

De ce que je sais sur PHP, la syntaxe suivante est non légale: xxx

Il devrait plutôt être écrit comme suit: xxx

Cependant, le premier exemple fonctionne très bien. Quelqu'un sache pourquoi?


1 commentaires

Développez toujours PHP avec toutes les rapports d'erreur sur. Tous les avis invisibles ralentissent votre application et le rendent inutilisable pour les autres qui n'ont pas été signalés par erreur.


6 Réponses :


14
votes

généralement, il serait interprété comme une constante, mais si PHP ne peut pas trouver une constante par ce nom, il suppose que c'est un littéral strict malgré le manque de citations. Cela générera un message e_notice (qui peut ne pas être visible, en fonction du niveau de déclaration d'erreur); quelque chose comme:

AVIS: Utilisation de la constante non définie oui - supposée 'oui' dans script.php sur la ligne 3

Fondamentalement, PHP est juste trop clément.


0 commentaires

8
votes

En bref, PHP agit comme si les devis étaient là.

Si PHP ne reconnaît pas quelque chose en tant que jeton réservé, cela traite comme un littéral à chaîne.

Le journal d'erreur montrera un avertissement à ce sujet.


0 commentaires

1
votes

Le premier n'est pas une chaîne.

et il ne fonctionne pas bien: P>

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


0 commentaires

0
votes

dans PHP que oui serait traité comme une constante. Si la constante est indéfinie, cela supposera que vous vouliez dire la chaîne «oui». Il devrait générer une notification si vous les avez allumées.


0 commentaires

1
votes

Vous devez avoir à la fois ERROR_RORPORTER DES AVISIOUS ET DISPLAY_Errors définie.

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

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


0 commentaires

0
votes

PHP convertit Oui à "Oui" en interne lorsque la constante oui est trouvée à ne pas être définie.

btw .. Si ce que vous voulez comparer si $ s a "oui" comme valeur an est une chaîne alors vous devez

a) utilise STRCMP ou b) Utilisez l'opérateur d'identité "==="


0 commentaires