PHP sprintf与echo

PHP sprintf与echo,php,echo,printf,Php,Echo,Printf,今晚早些时候,我发布了一个问题——一些引用给我带来了一些问题 发布了一个答案,建议使用echo sprintf。这看起来非常干净,并解决了可能出现的任何变量“报价”问题。我的问题是,使用sprintf的缺点是什么?如果有的话 如果echo通常会导致HTML和PHP混合出现问题,那么我们为什么要使用它呢。作为参考,这是重复的声明: echo”“ 以及echo&sprintf: echo sprintf( '<img src="%s/img/%s.png" />', g

今晚早些时候,我发布了一个问题——一些引用给我带来了一些问题

发布了一个答案,建议使用echo sprintf。这看起来非常干净,并解决了可能出现的任何变量“报价”问题。我的问题是,使用sprintf的缺点是什么?如果有的话

如果echo通常会导致HTML和PHP混合出现问题,那么我们为什么要使用它呢。作为参考,这是重复的声明:

echo”“

以及echo&sprintf:

echo sprintf(
    '<img src="%s/img/%s.png" />', 
    get_bloginfo('template_url'), 
    $f['mainImage']
);
echo sprintf(
'', 
获取博客信息(“模板url”),
$f['mainImage']
);

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


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

sprintf可能是因为它提供的格式化功能而被推荐的。我不知道sprintf在性能上有什么缺点;它可能在引擎盖下发出相同的C呼叫。我同意Wiseguy的评估,尽管printf是做同样事情的更直接的方法。

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

“echo”、“sprintf”和“print”不是函数,而是一种语言结构

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

对于一般情况,乍一看,这种差异并不明显,甚至往往不相关。在某些特殊情况下,
“sprintf”
会更好


但是
echo
的处理速度比
sprintf快。

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


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

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

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

  • 使用单引号

    $str='你好,世界。这可能是一个php$变量'

    echo$str;//输出:你好,世界。这可能是一个php$变量

由于字符串被包装在单引号中,php引擎将不会尝试将$variable解释为实际变量,您在引号中看到的内容将被回显

  • 使用双引号
echo$str;//输出:你好,世界。这将被解释为随机文本

在本例中,php将尝试查找名为$variable的变量,并在字符串中使用其内容

  • herdoc语法
herdoc对于你想做的事情很有用——你有一个混合变量,单引号,双引号,以及逃避所有可能是一团糟的事情。因此,优秀的php人员为我们实现了以下语法:

$str = <<<EOF
<img src="$directory/images/some_image.gif" alt='this is alt text' />
<p>Hello!</p>
EOF;

$str=为什么
echo sprintf()
而不是简单地
printf()
?我同意Charles Brunet的观点。顺便说一下,您在代码示例中使用了两个不同的函数。(bloginfo with执行自己的回显/打印并获取返回信息的bloginfo)。第一个也可以是:
echo”“就个人而言,既然你使用的是双引号。。。为了清理echo语句,我将echo更改为包含更少的concats,但是。。。只是一个随机的偏好
echo'
$str = <<<EOF
<img src="$directory/images/some_image.gif" alt='this is alt text' />
<p>Hello!</p>
EOF;
$str = <<<'EOF'
    <p>Hello! This wants to be a $variable but it won't be interpreted as one!</p>
    EOF;