2011-03-14 6 views
5

printf("by %1$s on %2$s", 'string1', 'string2'); no funciona, mientras que printf('by %1$s on %2$s', 'string1', 'string2'); lo hace.¿Por qué no funciona printf() en PHP cuando uso comillas dobles?

En realidad, estoy diseñando un tema de Wordpress, y siguiendo muy de cerca el tema original de los veinte. Lo extraño es que he estado usando comillas dobles en todas mis declaraciones anteriores de printf() sin ningún tipo de problema.

Respuesta

11

Porque cuando se está utilizando comillas dobles del $s es tratada como una variable

Como en:

$x = "World"; 
echo "Hello $x"; // Will print: "Hello World 

donde como cuando se utiliza:

$x = "World"; 
echo 'Hello $x'; // Will just print "Hello $x" 

Para una explicación más detallada puede verificar el manual:

Strings in General

Single quoted vs Double quoted

+0

gracias! utilicé% 1 \ $ s y funcionó. : D –

+0

@fterh, debe marcar esta respuesta como correcta si le ayudó (la flecha verde grande a la izquierda). – JohnP

2

Eso es porque usted tiene el bit '$ s' en la cadena. Al usar comillas dobles, PHP lo interpreta como una variable e intenta analizarlo. Probablemente utilizó citas dobles sin el $ anteriormente.

3

Es muy importante darse cuenta de que php está tratando cadenas de comillas simples y comillas dobles de manera diferente.

Puede leer más en oficial php docs, pero te voy a dar un toque de luz:

$t = 'bla'; 
echo '$t'; 

voluntad de salida $ t, donde

$t = 'bla'; 
echo "$t"; 

bla es la salida

1

Como el otro las respuestas dicen que trata a $s como una variable, siempre se puede escapar del $

printf("by %1\$s on %2\$s", 'string1', 'string2'); 

Sin embargo, utilizaría comillas simples, ya que php no necesita analizar la cadena y, por lo tanto, es más rápido.

+0

PHP analizará la cadena incluso con comillas simples porque (1) necesita buscar el final de la cadena y (2) busca la secuencia de escape '\ '' que no finaliza la cadena. Como resultado, la diferencia de velocidad es cercana a cero (modulo posibles errores en la implementación, con versiones antiguas de PHP esto hizo la diferencia). –

Cuestiones relacionadas