PHP sprintf vs. echo


PHP sprintf vs. echo

我今晚早些时候发布了一个问题- PHP Wordpress引号问题,其中一些引号导致了我一些问题。

有人建议使用echo sprintf。这看起来非常干净,并照顾到任何变量&可能发生的报价问题。我的问题是,使用sprint有什么缺点?如果任何?

如果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']
);

不是echo语句"导致"问题,而是新手缺乏可用的信息,所以我将尝试解释它们。

php中有四种指定字符串的方法:
  • 使用单引号

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

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

由于字符串是用单引号括起来的,php引擎不会尝试将$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引擎将尝试解释变量(和函数,但我不会发布如何做到这一点的例子,因为它可以在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可能是因为它提供了格式化功能。我不知道短跑有任何性能劣势;它很可能在背后打了一个相同的C电话。我同意Wiseguy的评估,尽管printf是一种更直接的方法来做同样的事情。

首先(sprintf)更灵活,是一个真正的功能。后者是一种语言结构,不那么灵活,但更容易和快速编写。

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

'sprintf'以不同的方式接受输入:你可以提供一个格式字符串,然后列出所有需要的输入。

通常情况下,乍一看差异并不明显,甚至不相关。在某些特殊情况下,'sprintf'可以更好。

echo处理速度比sprintf.

如果你仔细看看你引用的答案,修复与sprintf无关,它使用get_bloginfo()而不是bloginfo();前者返回字符串,而不是回显它。

sprintf更多的是一种风格——一些人喜欢用c风格的%s格式字符串代替他们的变量,另一些人喜欢使用PHP的变量展开字符串。