为什么会有人使用printf来输出html,而不是将PHP分解成实际的html?

为什么会有人使用printf来输出html,而不是将PHP分解成实际的html?,php,html,wordpress,syntax,printf,Php,Html,Wordpress,Syntax,Printf,看看wordpress的第二十个主题中的代码: <?php function twentyten_posted_on() { printf( __( '<span class="%1$s">Posted on</span> %2$s <span class="meta-sep">by</span> %3$s', 'twentyten' ), 'meta-prep meta-prep-author', s

看看wordpress的第二十个主题中的代码:

<?php
function twentyten_posted_on() {
    printf( __( '<span class="%1$s">Posted on</span> %2$s <span class="meta-sep">by</span> %3$s', 'twentyten' ),
        'meta-prep meta-prep-author',
        sprintf( '<a href="%1$s" title="%2$s" rel="bookmark"><span class="entry-date">%3$s</span></a>',
            get_permalink(),
            esc_attr( get_the_time() ),
            get_the_date()
        ),
        sprintf( '<span class="author vcard"><a class="url fn n" href="%1$s" title="%2$s">%3$s</a></span>',
            get_author_posts_url( get_the_author_meta( 'ID' ) ),
            sprintf( esc_attr__( 'View all posts by %s', 'twentyten' ), get_the_author() ),
            get_the_author()
        )
    );
}
?>

我只是个人品味的问题。使用sprintf的作者可能更喜欢它,因为它将表示与逻辑分离。我发现你的方法更容易阅读(我也更喜欢避免使用短的开放标签)。

它是按原样编写的,因此可以国际化。您将看到,在对
printf()
的调用中,有一个对
的调用,这是WordPress的翻译函数

这样,翻译人员只需移动
%1$s
部分,就可以轻松地移动每个字符串的各个部分,以符合其语言的语法和结构。然后,转换后的格式字符串被传递到
printf()
,后者可以插入适当的变量

有一些翻译方面的例子(尽管字符串比较简单)


并不是所有的翻译都是严格必要的,但由于他们已经在做一些printf风格的事情,我想理论是,如果它至少是一致的,那么更容易理解。

这取决于你需要渲染什么。当第一个参数是变量字符串或本地化字符串时,我个人使用
sprintf
printf


另一方面,这个代码示例的真正问题是如何从函数内部输出HTML。。。。我会使用一个“视图”文件(例如:
include$view\u file;
),这样代码就可以正确地分离和组织起来。

不,它不会将表示与逻辑分离。它仍然将表示合并到逻辑中,但它只是隐藏在字符串中,而不是分解成非PHP块。将
sprintf
嵌套在
printf
中很奇怪,但我经常使用
printf
以HTML格式输出格式化的数字数据。我认为printf很好。我同意,它在html中确实很有用,但是对于像那样输出html来说,它看起来有点凌乱。呵呵,好的。谢谢这解释了很多!所以在我的例子中,只有当我为我的博客选择了一种不同的语言时,这才有帮助。我敢打赌,很多wordpress主题在翻译方面做得并不好。另一方面,人们通常会为自己的语言设计一个html模板。许多人为自己的网站定制的主题只是忽略了本地化,因为他们只需要英语。当然,TwentyTen确保支持它,因为它是官方默认主题。设计用于共享的主题通常也会支持翻译,这是有道理的。因此,无论是哪种语言,它都是开箱即用的。
<?php
function twentyten_posted_on() {
    ?>
    <span class="meta-prep meta-prep-author">Posted on</span>
    <a href="<?php= get_permalink() ?>" title="<?php= esc_attr( get_the_time() ) ?>" rel="bookmark">
        <span class="entry-date">get_the_date()</span>
    </a>
    <span class="meta-sep">by</span>
    <span class="author vcard">
        <a class="url fn n" href="<?php= get_author_posts_url( get_the_author_meta( 'ID' ) ) ?>" title="<?php= esc_attr__( 'View all posts by '.get_the_author() ) ?>"><?php= get_the_author() ?></a>
    </span>
    <?php
}
?>