PHP sprintf против эха

Сегодня вечером я опубликовал вопрос - проблема с кавычками PHP Wordpress, где некоторые кавычки вызывали у меня некоторые проблемы.

Был опубликован ответ, предлагающий использовать echo sprintf. Это выглядело очень чистым и позаботилось о любых переменных и проблемах с цитированием, которые могут возникнуть. Мой вопрос: в чем недостаток использования sprintf? Если есть?

Почему мы используем echo, если это обычно вызывает проблемы при смешивании HTML и PHP. Для справки это было повторенное заявление:

echo "<img src='"; bloginfo('template_url'); echo "img/" . $f['mainImage'] . ".png' />";

и эхо и спринтф:

echo sprintf(
    '<img src="%s/img/%s.png" />', 
    get_bloginfo('template_url'), 
    $f['mainImage']
);

person benhowdle89    schedule 13.04.2011    source источник
comment
Почему echo sprintf(), а не просто printf()?   -  person Wiseguy    schedule 14.04.2011
comment
Я согласен с Шарлем Брюне. Кстати, вы используете две разные функции в своих примерах кода. (bloginfo выполняет собственное эхо/печать, а get_bloginfo возвращает информацию). Первым также может быть: echo "<img src='" . get_bloginfo('template_url') . "img/" . $f['mainImage'] . ".png' />";   -  person Eliasdx    schedule 14.04.2011
comment
Лично, поскольку вы все равно используете двойные кавычки... чтобы очистить оператор эха, я бы изменил эхо, чтобы включить намного меньше конкатов, но... просто случайное предпочтение echo "<img src='".get_bloginfo('template_url')."img/{$f['mainImage']}.png' />";   -  person Anther    schedule 14.04.2011


Ответы (4)


Главный недостаток — скорость. Но в большинстве случаев это не имеет значения. Это было бы только в том случае, если бы вы печатали много информации в большом цикле. sprintf — отличная функция, и вы должны ее использовать.

Но было бы лучше использовать printf вместо echo sprintf.

person Charles Brunet    schedule 13.04.2011

Вероятно, sprintf был предложен из-за возможностей форматирования, которые он вам дает. Я не знаю о каком-либо недостатке производительности для sprintf; он, вероятно, делает идентичный вызов C под капотом. Я согласен с оценкой Wiseguy, хотя printf — это более простой способ сделать то же самое.

person brokenbeatnik    schedule 13.04.2011

Первая (sprintf) более гибкая и реальная функция. Последний представляет собой языковую конструкцию, менее гибкую, но более простую и быструю в написании.

«echo», «sprintf» и «print» — это не функции, а языковые конструкции.

'sprintf' принимает ввод по-другому: вы можете указать строку формата, а затем перечислить все необходимые вводные данные.

Для обычных случаев разница не очевидна на первый взгляд, а зачастую и не существенна. В некоторых особых случаях 'sprintf' может быть лучше.

Но echo обрабатывает быстрее, чем sprintf.

person Community    schedule 13.04.2011

Если вы внимательно посмотрите на ответ, на который вы ссылаетесь, исправление не имеет ничего общего с sprintf, оно использует get_bloginfo() вместо bloginfo(); первый возвращает строку, а не повторяет ее.

sprintf больше относится к стилю: некоторым людям нравится заменять свои переменные строками формата %s в стиле c, другим нравится использовать раскрытие переменных PHP в строковых литералах.

person Matt Bridges    schedule 13.04.2011