3

我正在从一本书中学习 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,而且我不想在早期养成任何不良习惯。

4

6 回答 6

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>
于 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

Paul,您在该代码中看到的是 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 回答