2011-02-03 14 views
5

Los espacios en blanco generalmente se ignoran en la sintaxis de PHP, pero hay varios lugares donde no se pueden poner sin afectar el sentido (y el resultado).PHP: espacios en blanco que sí importan

Un ejemplo es:

$a = 5.5; // five and a half (float) 
$b = 5 . 5; // "55" (string) 

¿Conoce algún otro ejemplo?

La pregunta es no se trata de por qué funciona de esta manera, pero cuáles son las situaciones, al omitir o colocar espacios en blanco cambia el programa, pero ambas versiones son sintácticamente correctas.

+0

Esa es una buena ;-) –

+0

Sí, sí, junto con todas las otras peculiaridades de PHP y cualquier otro idioma escrito y hablado. Lo siento, ¿cuál fue la pregunta? – PurplePilot

+2

Una buena variación de su segundo caso es '$ b = 5 ... 5;' - aunque constituye más un caso en que los espacios ayudarían a la legibilidad. – mario

Respuesta

0

En su ejemplo, está dividiendo un solo token léxico en dos (un poco como romper function en func tion, el espacio en blanco no se ignora de esa manera). Esto no es realmente interesante, podrías encontrar muchos ejemplos cuando las cosas se rompen de esa manera, la única tarea interesante es tratar de encontrar un ejemplo que funcione (es decir, no un error de sintaxis), pero de manera diferente, por ejemplo:

$a = $x++ + $y; // x is incremented 
$b = $x+ + + $y; // x is not incremented 
8

Ese me hizo enloquecer. Presento el espacio en blanco de la fatalidad:

function foo() { 
    print "I'm foo."; 
} 

if (something()) { 
    foo(); 
} 

Al ejecutar, el error fue:

Fatal error: Call to undefined function foo() on line 6

Después de una hora o así, descubrí, el mensaje de error realidad dijo:

Fatal error: Call to undefined function foo() on line 6

Observe los espacios dobles:

function foo()

Resultó que por copiar/pegar el código de seguridad (formateado con highlight_string), un espacio de no separación  , o 0xA0 es aceptable en los identificadores, por lo que la llamada de función fue la de 0xA0foo() en lugar de foo().

+0

Esto me pasa todo el tiempo (así que sé dónde mirar), porque AltGr + Space inserta una nbsp en el diseño de mi teclado, por lo que a menudo no soy lo suficientemente rápido para suelta AltGr antes de presionar espacio, y aquí vamos. – Mormegil

+1

Wow ... ¿Hay algún error en esto? Esto seguramente no sigue lo que dice el documento: 'Un nombre de función válido comienza con una letra o guión bajo, seguido de cualquier número de letras, números o guiones bajos. Como una expresión regular, se expresaría así: [a-zA-Z_ \ x7f- \ xff] [a-zA-Z0-9_ \ x7f- \ xff] *. ' – Mchl

+0

@Mchl Pensé en presentar un informe de error para eso. [Dado cómo se manejaron mis informes de errores anteriores] (http://bugs.php.net/bug.php?id=51112) Decidí no hacerlo. Curiosamente, '0xA0' (el espacio sin interrupciones) se ajusta a la expresión regular ... –

2

¡No puede poner espacios en medio de un número! Gosh!

$x = 10 3.5; //syntax error 

Si pone un espacio en el medio de un operador, ¡ya no es ese operador!

if (true & & true) echo 'true'; //syntax error 

Si pongo un espacio en el medio de la cuerda, ¡no es la misma cuerda!

echo "Hel lo World"; //does NOT print "Hello World"! 

Lo sentimos, pero esta pregunta es ridícula, ya que por supuesto no se puede tirar espacios en el medio de fichas sin que ninguna de cambiar el comportamiento o romper el código. Lo mismo que en prácticamente cualquier otra programación y lenguaje escrito.

5.5 es un número, 5 . 5 es una cadena porque . es el operador de concatenación de cadenas. Esa es solo la sintaxis del lenguaje.

+1

Por supuesto que entiendo lo que está pasando allí. La pregunta era cuáles son las situaciones en las que omitir o colocar espacios en blanco afecta el programa (pero ambas posibilidades son correctas). – mateusza

Cuestiones relacionadas