Зачем кому-то использовать printf для вывода html вместо того, чтобы разбивать PHP на настоящий html? - PullRequest
2 голосов
/ 28 мая 2011

Посмотрите на этот ужасный код из двадцати тем 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()
        )
    );
}
?>

Зачем кому-то хотеть это делать?

Почему бы не сделать следующее вместо этого?

<?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
}
?>

Последнее намного чище для меня. Почему бы вместо этого использовать первый метод? Это просто личное предпочтение или есть какая-то функциональная выгода?

Ответы [ 3 ]

17 голосов
/ 28 мая 2011

Написано так, как оно есть, поэтому оно может быть интернационализировано.Вы увидите, что внутри вызова printf() есть вызов __(), который является функцией перевода WordPress.

Таким образом, переводчики могут легко перемещать части каждой строки,просто перемещая части %1$s, чтобы соответствовать грамматике и структуре их языка.Затем переведенная строка форматирования передается в printf(), который может вставить соответствующие переменные.

Страница документа WordPress по переводу содержит некоторые примеры этого с переводчиком (хотя и сболее простые строки).

Не все, что там происходит, строго необходимо для перевода, но, поскольку они уже делают некоторые вещи в стиле printf, я полагаю, теория заключается в том, что легче понять, еслинаименее последовательный.

1 голос
/ 28 мая 2011

Это зависит от того, что вам нужно сделать.Лично я использую sprintf и printf, когда первый аргумент является строкой переменной или локализованной строкой.

Кстати, реальная проблема в этом примере кода состоит в том, как он выводит HTML изнутриfunction .... Я бы вместо этого использовал файл "view" (например: include $view_file;), чтобы код был правильно разделен и организован.

1 голос
/ 28 мая 2011

Я только вопрос личного вкуса. Автор, использующий sprintf, мог предпочесть его, потому что он отделяет представление от логики. Мне легче читать ваш путь (я также предпочитаю избегать использования коротких открытых тегов).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...