关于如何在 php 中编写 html 代码的不同角度?

A different angle on How to write html code inside php?

我们通过 <?php ... ?> 标签在 HTML 代码中编写 PHP 代码。所以通常在 HTML 代码中编写 HTML 代码是没有意义的,如果你可以退出 PHP 代码行你需要的代码。但是,如果您需要 HTML 代码与 PHP 代码位于同一行怎么办?

我的例子是这样的:

<div>
    <?php ($bool) ? <script>...</script> : <script></script> ?>
</div>

这是:

<div>
    <?php if($bool): ?>
        <script>...</script>
    <?php else: ?>
        <script>...</script>
    <?php endif; ?>
</div>

唯一的方法?

注意: 而不是 <script> 你可以有 <h1><strong><title> 或任何其他 "one-liner".

提前致谢。

为了将来自 PHP 片段的任何字符串打印到您的 html 代码中,请使用 echo 函数。

http://php.net/manual/en/function.echo.php

所以你只需要添加 echo

<div>
<?php 
    if($bool) {
     echo '<script>...</script>';
    } else {
     echo '<script>...</script>';
    } ?>

当然,当您有多行 HTML 时,替代语法将是您已经说过的方式...

但是,对于一个衬垫,您可以将 <?php echo '...' ?> 缩短为 <?= '...' ?> 并将 HTML 括在单引号或双引号内,具体取决于您是否已经在 HTML语法。如果你愿意,你也可以逃避它们,但那样会很混乱。

<div>
    <?= ($bool) ? "<script>...</script>" : "<script></script>" ?>
</div>

偶然发现这个问题并决定回答我自己的问题只是为了给其他新手指明正确的方向。

重要说明:现在我正在使用 Laravel Framework,如果你不知道它,你一定要了解它(虽然有其他选择).

但我什至在那之前就开始强烈关注 MVC 架构。所以甚至在 Laravel 的 Blade 模板之前,我的视图看起来如下所示。

<html>
<body>
    <?php if ($isUserAuthenticated) : ?>
        <div>
            <span>Welcome <?= $username ?>
        </div>
    <?php else : ?>
        <a href="login">Login</a>
    <?php endif ?>
</body>
</html>

如您所见,视图中绝对没有数据操作。

我也尽力不将任何 HTML 字符串存储到变量中,但有时它会减少代码,所以我做了类似下面的事情。

$alert = match($errorCode) {
  1 => <<<HTML
    <div class="alert alert-danger">Big error</div>
    HTML,
  2 => <<<HTML
    <div class="alert alert-warning">Small error</div>
    HTML,
  default => ""
};

这样我就可以为 HTML.

保留语法高亮显示(在 VSCode 中)

注意:匹配表达式是 PHP8 中的新内容,但您可以使用 switch 语句实现相同的功能。