2010-05-04 8 views
7

Por lo que sé acerca de PHP, la siguiente sintaxis es no legal:PHP comparación de cadenas sin comillas

if ($s == Yes) 

En su lugar, debe ser escrita como:

if ($s == 'Yes') 

Sin embargo, la primera ejemplo está funcionando bien. Alguien sabe por qué?

+0

Desarrolle siempre PHP con TODOS los informes de error. Todos los avisos invisibles ralentizan su aplicación y la hacen inutilizable para otros que no han desactivado el informe de errores. –

Respuesta

13

Normalmente, se interpretaría como una constante, pero si PHP no puede encontrar una constante con ese nombre, se supone que es una cadena literal a pesar de la falta de comillas. Esto generará un mensaje E_NOTICE (que puede no ser visible, dependiendo de su nivel de informe de errores); algo así como:

Aviso: El uso de indefinido constante Sí - asumió 'Sí' en script.php en la línea 3

Básicamente, PHP es simplemente demasiado indulgente.

8

En resumen, PHP actúa como si las comillas estuvieran allí.

Si PHP no reconoce algo como un token reservado, lo trata como un literal de cadena.

El registro de errores mostrará una advertencia al respecto.

1

El primero no es una cadena.

Y no es funciona bien:

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

Es una herencia de los tiempos en PHP eran sólo una "página de inicio Bastante" forma intérprete y recomienda en la actualidad.

0

En PHP que Sí se trataría como una constante. Si la constante no está definida, supondrá que se refiere a la cadena 'Sí'. Debería generar una notificación si los tiene activados.

1

Necesita tener tanto error_reporting mostrando avisos, como display_errors activados.

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

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

PHP convierte Sí a 'Sí' internamente cuando la constante Sí no se define.

Por cierto .. Si lo que quiere es comparar si tiene $ s "Sí" como el valor de una es una cadena entonces usted tiene que

a) el uso o strcmp b) utilizan el operador de identidad "=== "

Cuestiones relacionadas