PHP 和 HTML 代码的结构


Structuring of PHP and HTML code

我对PHP相当陌生,有几个问题。我不确定的是我应该如何在HTML中构建或实现PHP代码。

到目前为止,我已经以两种不同的方式构建了编码,要么回显出 HTML,要么尽可能保持 PHP 最小。

您更喜欢以下两个示例中的哪一个?我想大多数人会回答代码一,但为什么呢?是因为阅读 HTML 语法突出显示的可取性吗?正如您在代码一中看到的那样,我必须键入 PHP 开始和结束标记来结束 foreach 函数,当代码开始变得非常大时,这有点烦人。看起来代码充满了最小操作的开始和结束 PHP 标签。

你如何构建你的代码?

代码示例 1:

<table border="5">
    <?php
        foreach ($a3 as $nokkel => $verdi){
    ?>
            <tr>
                <td><?php echo $nokkel; ?></td>
                <td><?php echo $verdi['selskap']; ?></td>
                <td><?php echo $verdi['siste']; ?></td>
            </tr>
    <?php } ?>
</table>

代码示例 2:

<table border="5">
    <?php
        foreach ($a3 as $nokkel => $verdi){
            echo "<tr>";
                echo "<td>$nokkel</td>";
                echo "<td>$verdi['selskap']</td>";
                echo "<td>$verdi['siste']</td>";
            echo "</tr>";
        }
     ?>
</table>

这两个例子都很好。但我通常更喜欢示例 2。

但是在这样的最小编码中(无需一次又一次地回显):

<table border="5">
    <?php
        foreach ($a3 as $nokkel => $verdi){
            echo '<tr>
            <td>'.$nokkel.'</td>
            <td>'.$verdi['selskap'].'</td>
            <td>'.$verdi['siste'].'</td>
            </tr>';
        }
     ?>
</table>

这取决于页面上有多少HTML内容PHP变量

考虑到您的示例,这是一个简单的表,仅显示值。 <%= $some_value %> 与回显"$some_value"没有太大区别。

但是对于复杂的HTML页面,其中有很多内容,我相信示例1会派上用场。在这里和那里嵌入PHP而不是回显内容,更方便,可读性和将来可编辑

这个问题和答案将是高度固执己见的,因为你在问人们喜欢什么。

但是,我想指出的是,php 确实支持与您正在使用的语法不同的语法,即 foreach:/endforeach if/endif 等。这样,您的示例

<table border="5">
    <?php
        foreach ($a3 as $nokkel => $verdi){
    ?>
            <tr>
                <td><?php echo $nokkel; ?></td>
                <td><?php echo $verdi['selskap']; ?></td>
                <td><?php echo $verdi['siste']; ?></td>
            </tr>
    <?php } ?>
</table>

可以这样写得更好:

<table border="5">
    <?php foreach ($a3 as $nokkel => $verdi): ?>
        <tr>
            <td><?php echo $nokkel; ?></td>
            <td><?php echo $verdi['selskap']; ?></td>
            <td><?php echo $verdi['siste']; ?></td>
        </tr>
    <?php endforeach; ?>
</table>

这有几个额外的好处:

  • 它更紧凑(浪费更少的线路)
  • 遵循几个块级别更容易(想想 if 在里面,if's inside foreach's)
  • 更容易阅读
  • 在代码中保留缩进。这很重要,因为有了echo建议,您很快就会失去对您所在 html 缩进级别的良好概述。

如果你有一个不错的IDE,语法高亮仍将应用于你的所有例子中,所以这应该不是一个主要问题。

编辑:添加了指向 php 手册的备用控件语法的链接。

编辑 2:由于我们正在讨论替代语法的主题,您还可以利用"短回显"语法通过将<?php echo更改为 <?= 来进一步降低代码的详细程度。如果您使用的是 php 版本 5.4 或更高版本,则 Short echo 始终可用(如果您现在开始学习或使用 php,您绝对应该这样做)。

使用它,您的代码可以进一步重构为:

<table border="5">
    <?php foreach ($a3 as $nokkel => $verdi): ?>
        <tr>
            <td><?= $nokkel; ?></td>
            <td><?= $verdi['selskap']; ?></td>
            <td><?= $verdi['siste']; ?></td>
        </tr>
    <?php endforeach; ?>
</table>

这两个示例还可以,这实际上取决于开发人员他/她认为哪个示例具有更好的可读性。但无论你选择什么,总会有权衡,例如:例如 1,您仍然需要键入大量 PHP 开始和结束标记。例如 2,您仍然必须编写一次 php 标签,尽管每个 html 标签都必须在echo内。但对我来说,选项 1 对我来说比第二个更具可读性,所以我选择了选项 1。

通常,

当遵循模型-视图-控制器模式(现在通常在 Web 应用程序中完成)时,开发人员会尝试将尽可能多的逻辑保留在 HTML 生成之外。

这就是为什么大多数 Web 开发框架使用模板引擎的原因,这会导致代码更接近您的第一个示例。除了您和其他人提到的优点(例如更清晰的语法)之外,一大优势是这些引擎可确保输出净地转义。在纯PHP中,你必须记住使用htmlspecialchars使代码更长 - 如果你忘记了它可能会导致危险的安全漏洞。

所以我的建议是:不要使用任何一种语法。而是寻找要使用的模板引擎。