con caracteres printf o sprintf precedidos por el signo% son marcadores de posición (o tokens). Serán reemplazados por una variable pasada como argumento.
Ejemplo:
$str1 = 'best';
$str2 = 'world';
$say = sprintf('Tivie is the %s in the %s!', $str1, $str2);
echo $say;
Esta es la salida:
Tivie es el mejor del mundo!
Nota: Hay más marcadores de posición (% s para cadenas,% d para el número dec, etc ...)
Orden:
El orden en el que se pasa los argumentos cuentan Si cambia $ str1 con $ str2 como
$say = sprintf('Tivie is the %s in the %s!', $str2, $str1);
se imprimirá
"Tivie es el mundo en el mejor!"
Puede, sin embargo, cambiar el orden de lectura de los argumentos de la siguiente manera:
$say = sprintf('Tivie is the %2$s in the %1$s!', $str2, $str1);
que imprimirá la oración correctamente.
Además, tenga en cuenta que PHP es un lenguaje dinámico y no requiere (o admite) la definición explícita de tipos. Eso significa que hace malabares con los tipos de variables según sea necesario. En sprint, significa que si pasas una "cadena" como argumento para un marcador de posición de número (% d), esa cadena se convertirá en un número (int, float ...) que puede tener resultados extraños. He aquí un ejemplo:
$onevar = 2;
$anothervar = 'pocket';
$say = sprintf('I have %d chocolate(s) in my %d.', $onevar, $anothervar);
echo $say;
esto imprimirá
tengo 2 del chocolate (s) en mi 0.
Más lectura en PHPdocs
Creo que su ejemplo junto con la explicación de Ned hacen una respuesta bastante sólida. Pregunta: si escribo 'sprintf ('Tivie es el% s en% s!', $ Str2, $ str2);', se repetirá "' Tivie es el mejor en el mundo! '"? –
saldrá "Tivie es el mundo en el mundo" desde str2 = world, – Tivie
Hooray para los errores tipográficos. Me reí de eso. Entonces '% strn' devuelve el valor de'% s [n] ', por así decirlo? Con esa misma notación, '% s% s' devuelve los valores de'% s [0]% s [1] '? –