PHP sprintf与echo

时间:2011-04-13 22:49:32

标签: php echo printf

我今晚早些时候发布了一个问题 - PHP Wordpress quotes issue,其中一些引言引起了一些问题。

发布了一个回答,建议使用echo sprintf。这看起来很干净,照顾任何变量&引用可能发生的问题。我的问题是,使用sprintf的缺点是什么?如果有的话?

为什么我们使用echo如果它通常会导致混合HTML和PHP的问题。作为参考,这是回音陈述:

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

和回声&amp; sprintf的:

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

5 个答案:

答案 0 :(得分:23)

这不是回声声明“导致”问题,而是缺乏新人可用的信息,所以我会尝试解释它们。

在php中有四种指定字符串的方法:

  • 使用单引号

    $str = 'Hello World. This might be a php $variable';

    echo $str; // Outputs: Hello World. This might be a php $variable

由于字符串包含在单引号中,因此php引擎不会尝试将$ variable解释为实际变量,并且将回显引号中 see 的内容。

  • 使用双引号

    $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引擎将尝试解释变量(和函数,但我不会发布关于如何执行此操作的示例,因为它可以在php.net上获得),但是您使用&lt;&lt;来包装字符串。

  • Nowdoc语法

    $str = <<<'EOF' <p>Hello! This wants to be a $variable but it won't be interpreted as one!</p> EOF;

与使用单引号字符串相同 - 不会发生变量替换,并将某些内容指定为nowdoc - 只需使用单引号字符包装分隔符,如示例所示。

如果您能够理解这四个原则,那么字符串中的引号问题就会消失:)

答案 1 :(得分:2)

主要缺点是速度。但在大多数情况下,这并不重要。只有当你在大循环中打印很多信息时才会这样。 sprintf是一个很棒的功能,你应该使用它。

但是使用printf而不是echo sprintf会更好。

答案 2 :(得分:2)

sprintf可能是为它提供的格式化功能而建议的。我不知道sprintf有任何性能劣势;它可能会在引擎盖下进行相同的C调用。我同意Wiseguy的评估,尽管printf是一种更直接的方式来做同样的事情。

答案 3 :(得分:2)

首先(sprintf)更灵活,更实用。后者是一种语言结构,不太灵活,但更容易编写。

'echo','sprintf'和'print'不是函数,而是语言构造

'sprintf'以不同的方式输入:您可以提供格式字符串,然后列出所有必需的输入。

对于普通情况,乍看之下差异并不明显,而且往往甚至不相关。在某些特殊情况下,'sprintf'会更好。

echo处理速度比sprintf.

答案 4 :(得分:0)

如果仔细查看您引用的答案,该修复程序与sprintf无关,而是使用get_bloginfo()代替bloginfo();前返回一个字符串而不是回显它。

sprintf更像是一种风格的东西 - 有些人喜欢用c风格的%s格式字符串替换他们的变量,有些人喜欢在字符串文字中使用PHP的变量扩展。