PHP sprintf против echo
я опубликовал вопрос ранее сегодня вечером -PHP Wordpress котировки вопрос где некоторые цитаты вызывали у меня некоторые проблемы.
был опубликован ответ, предлагающий использовать echo sprintf. Это выглядело очень чисто и позаботилось о любых проблемах с переменной и цитированием, которые могут возникнуть. Мой вопрос в том, в чем недостаток использования sprintf? Если есть?
почему мы используем echo
если это обычно вызывает проблемы с смешиванием HTML и PHP. Для справки это было повторенное заявление:
echo "<img src='"; bloginfo('template_url'); echo "img/" . $f['mainImage'] . ".png' />";
и Эхо & sprintf:
echo sprintf(
'<img src="%s/img/%s.png" />',
get_bloginfo('template_url'),
$f['mainImage']
);
5 ответов
это не утверждение echo, которое "вызывает" проблемы, это отсутствие информации, доступной новичкам, поэтому я попытаюсь объяснить их.
существует четыре способа указания строки в php:
-
использование одной цитаты
$str = 'Hello World. This might be a php $variable';
echo $str; // Outputs: Hello World. This might be a php $variable
поскольку строка была завернута в одинарную кавычку, PHP engine не будет пытаться интерпретировать $variable как фактическую переменную и содержание того, что вы посмотреть в кавычках будет вторит.
-
использование двойной кавычки
$variable = 'random text'; $str = "Hello World. This will be interpreted as $variable";
echo $str; // Outputs: Hello World. This will be interpreted as random text
в этом примере php попытается найти переменную с именем $variable и использовать ее содержимое в строке.
- синтаксис Heredoc
Heredoc полезен для таких вещей, как то, что вы хотели сделать - у вас есть смесь переменных, одинарных кавычек, двойных кавычек и экранирование всего, что может быть беспорядком. Следовательно, хорошие люди php реализовали для нас следующий синтаксис:
$str = <<<EOF
<img src="$directory/images/some_image.gif" alt='this is alt text' />
<p>Hello!</p>
EOF;
что произойдет, так это то, что PHP engine попытается интерпретировать переменные (и функции, но я не буду публиковать примеры того, как это сделать, поскольку он доступен на php.net), однако вы обернули строку с
-
Nowdoc синтаксис
$str = <<<'EOF' <p>Hello! This wants to be a $variable but it won't be interpreted as one!</p> EOF;
это то же самое, что использовать строку с одной кавычкой-никаких замен переменных не происходит, и чтобы указать что - то как nowdoc - просто оберните разделитель символами с одной кавычкой, как показано в Примере.
если вы в состоянии понять эти четыре принципа, проблемы с кавычками в вашей строке должны уйти :)
основным недостатком является скорость. Но в большинстве случаев, это не имеет значения. Это было бы, только если бы вы печатали много информации, в большом цикле. sprintf-отличная функция, и вы должны ее использовать.
но лучше использовать printf вместо echo sprintf.
sprintf, вероятно, был предложен для возможностей форматирования, которые он дает вам. Я не знаю о каких-либо недостатках производительности sprintf; вероятно, он делает идентичный вызов C под капотом. Я согласен с оценкой Wiseguy, хотя printf-более простой способ сделать то же самое.
первый (sprintf)
является более гибкой и реальной функцией. Последний - это языковая конструкция, менее гибкая, но более простая и быстрая в написании.
'echo', 'sprintf' и 'print' - это не функции, а языковые конструкции
'sprintf' принимает ввод по-разному: вы можете предоставить строку формата, а затем перечислить все необходимые входные данные.
для общих случаев разница не очевидна на первый взгляд, и довольно часто даже не соответствующие. В каком-то особенном дела 'sprintf'
может быть лучше.
но echo
процессы быстрее, чем sprintf.
если вы внимательно посмотрите на ответ, который вы ссылаетесь, исправление не имеет ничего общего с sprintf
, Он, используя get_bloginfo()
вместо bloginfo()
, бывший возвращает строка, а не Эхо.
sprintf больше похож на стиль - Некоторые люди любят заменять свои переменные c-style %s
format strings, другие любят использовать расширение переменных PHP в строковых литералах.