将PHP与HTML结合的约定

时间:2012-06-27 05:42:17

标签: php html echo

我正在从一本书中学习PHP。作者使用echo输出HTML。起初我以为这就是它应该如何完成的,但后来我选择了一本更“先进”的书。第二本书的作者在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> ';

我问的原因是因为我发现在使用第二种技术时难以正确对齐HTML,而且我不想在早期养成任何坏习惯。

6 个答案:

答案 0 :(得分:4)

第一种方法使您的代码更具可读性。当您需要打印一些少量的html代码时,第二种方法很有用。您也可以使用短打开标签在html标签之间插入您的PHP代码。例如,如果您需要打印URL的语言参数,可以这样做:

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

这等于:

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

答案 1 :(得分:1)

我建议一般使用一个好的framework,然后使用一个templating engine来输出页面。这样,您的数据模型,应用程序逻辑和HTML都将保持独立。

答案 2 :(得分: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);
?>

答案 3 :(得分:0)

Paul,您在该代码中看到的是PHP,CSS和HTML的组合。 echo只是意味着在页面上打印,它是一个PHP函数,这就是你用标签看到它的原因。

<?php ?>

这会回答你的问题吗?

此外,PHP和HTML以及CSS不会解析任何空格,因此会进行缩进以增强可读性。我建议你评论你的代码并格式化它,但是你更容易理解。从专业角度来看,请查看W3C验证器以获得正确的代码格式。

答案 4 :(得分:0)

两者都是可以接受的,使用echo作为简短的语句,并完全打破了PHP的长位html。压缩HTML并不重要,当有人检查你的来源时,它看起来很漂亮。

答案 5 :(得分: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);

注意它读起来有多容易。您也不需要任何评论,因为变量名称是自解释的