3

本でPHPを勉強しています。作成者はechoHTML を出力するために使用します。最初はこれが本来のやり方だと思っていましたが、その後、より「高度な」本を手に取りました。2 冊目の本の著者は、すべてをエコーするのではなく、HTML の間に PHP コードを挿入しました。大規模なプロジェクトに取り組んでいる大規模な Web 開発会社では、どのように行われているのでしょうか? どちらかを使用できますか、それともどちらか一方がより受け入れられますか?

たとえば、次のコードをご覧ください。

<?php
//pagination
if ($pages > 1) {
    //determine the current page
    $current_page = ($start / $display) + 1;

    //print out Previous Page button
    if ($current_page != 1) {
?>
        <div class="pages"><strong><a href="view_users.php?s=<?php echo ($start - $display); ?>&amp;p=<?php echo $pages; ?>">&nbsp;&lt;&nbsp;</a></strong></div>
<?php
    }

    //print the page numbers
    for ($i = 1; $i <= $pages; $i++) {
        if ($i == $current_page) {
?>
         <div class="pages active"><span>&nbsp;<?php echo $i; ?>&nbsp;</span></div>
<?php
    }
    else {
?>
        <div class="pages"><strong><a href="view_users.php?s=<?php echo ($display * ($i - 1)); ?>&amp;p=<?php echo $pages; ?>">&nbsp;<?php echo $i; ?>&nbsp;</a></strong></div>
<?php
        }//end of $i = $current_page conditional
    }//end of FOR loop

    if ($current_page < $pages) {
?>
        <div class="pages"><strong><a href="view_users.php?s=<?php echo ($start + $display); ?>&amp;p=<?php echo $pages; ?>">&nbsp;&gt;&nbsp;</a></strong></div>
<?php
    }
}//end of pagination

include('includes/footer.php'); 
?>

それは正しい方法ですか、それとも次のようなものを使用する必要があります:

echo '<a href="view_users.php?s=' . ($display * ($i - 1)) . 
'&p=' . $pages . '&sort=' . $sort . '">' . $i . '</a> ';

私が質問している理由は、2 番目の手法を使用するときに HTML を適切に配置するのが難しく、早い段階で悪い習慣を身につけたくないからです。

4

6 に答える 6

4

最初の方法は、コードを読みやすくします。2番目の方法は、少量のhtmlコードを印刷する必要がある場合に役立ちます。また、短いオープンタグを使用して、htmlタグの間にphpコードを挿入することもできます。たとえば、URLの言語パラメータを印刷する必要がある場合は、次のように実行できます。

<a href="index.php?lang=<?=$lang?>" >A Link</a>

これはこれと同じです:

<a href="index.php?lang=<?php echo $lang; ?>" >A Link</a>
于 2012-06-27T05:51:12.537 に答える
1

一般的には優れたフレームワークと、ページを出力するためのテンプレートエンジンを使用することをお勧めします。このようにして、データモデル、アプリケーションロジック、およびHTMLはすべて別々に保持されます。

于 2012-06-27T05:48:41.447 に答える
1

これはやや主観的な質問ですが、

echo '<a href="view_users.php?s=' . ($display * ($i - 1)) . 
'&p=' . $pages . '&sort=' . $sort . '">' . $i . '</a> ';

すぐに読みにくくなるので、これはあまり良くありません。IMO を使用するのは最悪のオプションです。

これをどのように改善できるかについての進化は次のとおりです。

<a
 href="view_users.php?s=<?php echo $display * ($i - 1); ?>&p=<?php echo $pages; ?>&sort=<?php echo $sort; ?>">
    <?php echo $i; ?>
</a>

<?php
    printf('<a href="view_users.php?s=%i&p=%i&sort=%s">%i</a>',
           $display * ($i - 1), $pages, $sort, $i);
?>

<?php
    $q = http_build_query(array(
        's'    => $display * ($i - 1),
        'p'    => $pages,
        'sort' => $sort
    ));
?>
<a href="view_users.php?<?php echo $q; ?>"><?php echo $i; ?></a>

<?php
    printf('<a href="view_users.php?%s">%i</a>',
           http_build_query(array(
               's'    => $display * ($i - 1),
               'p'    => $pages,
               'sort' => $sort
           )),
           $i);
?>
于 2012-06-27T06:00:47.393 に答える
0

ポール、あなたがそのコードで見ているのは、PHP、CSS、および HTML の組み合わせです。echo は単にページに印刷することを意味し、これは PHP 関数であるため、タグで表示されます。

<?php ?>

これはあなたの質問に答えていますか?

また、PHP と HTML と CSS は空白を解析しないため、読みやすくするためにインデントが行われます。コードにコメントを付けてフォーマットすることをお勧めしますが、理解しやすいです。専門的な観点から、適切なコード形式については W3C バリデーターをチェックしてください。

于 2012-06-27T05:51:56.300 に答える
0

短いステートメントには echo を使用し、長い HTML には完全に php を分割します。HTML のインデントはそれほど重要ではありません。誰かがソースをチェックアウトしたときに見栄えがするだけです。

于 2012-06-27T05:51:58.860 に答える
0

html 生成を関数でラップし、出力文字列を作成することは、良い方法です。そうすれば、複雑なロジックを読みやすい方法で表現できます。

<?php

function get_pagination_html($pages, $start, $display) {
    $html = "";

    if ($pages <= 1) return $html;

    $current_page = ($start / $display) + 1;

    if ($current_page != 1) {
        $previous = $start - $display;
        $html .= "<div class='pages'><strong><a href='view_users.php?s={$previous}&amp;p={$pages}'>&nbsp;&lt;&nbsp;</a></strong></div>";
    }

    for ($page_number = 1; $page_number <= $pages; $page_number++) {
        if ($page_number == $current_page) {
            $html .= "<div class='pages active'><span>&nbsp;{$page_number}&nbsp;</span></div>";
        } else {
            $page_start = $display * ($page_number - 1);
            $html .= "<div class='pages'><strong><a href='iew_users.php?s={$page_start}>&amp;p={$pages}'>&nbsp;{$page_number}&nbsp;</a></strong></div>";
        }
    }

    if ($current_page < $pages) {
        $next = $start + $display;
        $html .= "<div class='pages'><strong><a href='view_users.php?s={$next}&amp;p={$pages}'>&nbsp;&gt;&nbsp;</a></strong></div>";
    }

    return $html;
}


echo get_pagination_html($pages, $start, $display);

どれだけ読みやすいかに注目してください。変数名は自明であるため、コメントも必要ありません

于 2014-11-24T13:21:07.990 に答える