Ответ 1
с символами printf или sprintf, которым предшествует знак%, являются заполнителями (или жетонами). Они будут заменены переменной, переданной как аргумент.
Пример:
$str1 = 'best';
$str2 = 'world';
$say = sprintf('Tivie is the %s in the %s!', $str1, $str2);
echo $say;
Это выведет:
Тиви - лучший в мире!
Примечание. Есть больше заполнителей (% s для строки,% d для номера деления и т.д.)
Order:
Порядок, в котором вы передаете аргументы, подсчитывается. Если вы переключите $str1 на $str2 как
$say = sprintf('Tivie is the %s in the %s!', $str2, $str1);
он напечатает
"Тиви - мир в лучшем!"
Однако вы можете изменить порядок чтения таких аргументов:
$say = sprintf('Tivie is the %2$s in the %1$s!', $str2, $str1);
который правильно напечатает предложение.
Кроме того, имейте в виду, что PHP является динамическим языком и не требует (или поддерживает) явного определения типа. Это означает, что при необходимости жонглирует переменными типами. В спринте это означает, что если вы передадите "string" в качестве аргумента для числового заполнителя (% d), эта строка будет преобразована в число (int, float...), которое может иметь странные результаты. Вот пример:
$onevar = 2;
$anothervar = 'pocket';
$say = sprintf('I have %d chocolate(s) in my %d.', $onevar, $anothervar);
echo $say;
это напечатает
У меня есть 2 шоколада (ов) в моем 0.
Подробнее читайте на PHPdocs