PHP sprintf vs. echo

| 我今晚早些时候发布了一个问题-PHP Wordpress引号问题,其中一些引号引起了我一些问题。 发布了一个答案,建议使用echo sprintf。这看起来很干净,并解决了可能发生的任何变量和报价问题。我的问题是,使用sprintf有什么缺点?如果有的话 如果通常会导致HTML和PHP混合出现问题,为什么我们要使用“ 0”呢?作为参考,这是回显的语句:
echo \"<img src=\'\"; bloginfo(\'template_url\'); echo \"img/\" . $f[\'mainImage\'] . \".png\' />\";
以及echo和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的格式化功能。我不知道sprintf的任何性能劣势。它可能在后台进行了相同的C调用。我同意Wiseguy的评估,尽管printf是执行相同操作的更直接的方法。     
第一个“ 9”更灵活,更实用。后一种是语言构造,灵活性较差,但编写起来更容易快捷。 \'echo \',\'sprintf \'和\'print \'不是函数,而是一种语言构造 \'sprintf \'采用不同的输入方式:您可以提供格式字符串,然后列出所有必需的输入。 对于常见情况,乍一看差异并不明显,而且通常甚至不相关。在某些特殊情况下,ѭ10可能更好。 但是
echo
sprintf.
的处理速度更快     
如果仔细查看参考答案,则解决方法与fix13ѭ无关,它使用的是
get_bloginfo()
而不是
bloginfo()
;前者返回一个字符串而不是回显它。 sprintf更像是一种样式的东西-有些人喜欢用c-style
%s
格式的字符串替换其变量,另一些人喜欢在字符串文字中使用PHP的变量扩展。     

要回复问题请先登录注册