printf("by %1$s on %2$s", 'string1', 'string2'); не работает, тогда как printf('by %1$s on %2$s', 'string1', 'string2'); работает.
printf("by %1$s on %2$s", 'string1', 'string2');
printf('by %1$s on %2$s', 'string1', 'string2');
Я на самом деле разрабатываю тему Wordpress и очень внимательно слежу за оригинальной двадцаткой. Странно то, что я использовал двойные кавычки во всех моих предыдущих выражениях printf () без каких-либо проблем.
Поскольку при использовании двойных кавычек $s рассматривается как переменная
$s
Как в:
$x = "World"; echo "Hello $x"; // Will print: "Hello World
где как при использовании:
$x = "World"; echo 'Hello $x'; // Will just print "Hello $x"
Более подробное объяснение вы можете найти в руководстве:
Общие строки
Одинарная кавычка против Двойная кавычка
Очень важно понимать, что php обрабатывает одинарные и двойные кавычки по-разному.
Вы можете прочитать больше в официальных документах php , но позвольте мне выделить вам:
$t = 'bla'; echo '$t';
выдаст $ t, где
$t = 'bla'; echo "$t";
выведет бла
Это потому, что в вашей строке есть бит '$ s'. При использовании двойных кавычек PHP интерпретирует его как переменную и пытается его проанализировать. Вы, вероятно, использовали двойные кавычки без $ в нем ранее.
$
Как говорят другие ответы, он обрабатывает $s как переменную, вы всегда можете избежать $
printf("by %1\$s on %2\$s", 'string1', 'string2');
Однако я бы использовал одинарные кавычки, так как php не нужно разбирать строку и, следовательно, быстрее.