1

我们通过标签在 HTML 代码中编写 PHP 代码<?php ... ?>。因此,通常情况下,如果您可以在需要的行中退出 PHP,那么在已经存在于 HTML 代码中的 PHP 代码中编写 HTML 代码是没有意义的。但是,如果您需要将 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>任何其他“单线”来代替。

先感谢您。

4

4 回答 4

1

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

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

于 2018-04-01T21:40:33.430 回答
1

所以你只需要添加回声

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

于 2018-04-01T23:11:54.453 回答
1

HTML当然,正如您已经说过的那样,当您有多行时,替代语法将是可行的方法...

<?php echo '...' ?>但是,对于一个衬里,您可以使用单引号或双引号来缩短<?= '...' ?>和包裹您HTML的内容,具体取决于您是否已经在HTML语法中使用双引号。如果你愿意,你也可以逃避它们,但这会很混乱。

<div>
    <?= ($bool) ? "<script>...</script>" : "<script></script>" ?>
</div>
于 2018-04-01T23:18:34.553 回答
0

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

重要提示:现在我正在使用 Laravel 框架,如果你不知道它,你一定要了解它(不过还有其他选择)。

但在此之前,我就开始强烈关注 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 语句来实现相同的表达式。

于 2021-08-25T08:04:18.310 回答