【问题标题】:A different angle on How to write html code inside php?关于如何在 php 中编写 html 代码的不同角度?
【发布时间】:2018-09-11 04:07:26
【问题描述】:

我们通过<?php ... ?>标签在HTML代码中编写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>

唯一的办法?

注意:您可以使用 &lt;h1&gt;&lt;strong&gt;&lt;title&gt; 或任何其他“单行”来代替 &lt;script&gt;

提前谢谢你。

【问题讨论】:

  • 将你的 html 放入 php 字符串并回显它们。或者做第二个 sn-p 之类的事情。
  • 有多种方法可以做到这一点。请参阅php.net/manual/en/language.types.string.php 以获取长列表。为什么一定要one-liner
  • 是的,效果很好。 &lt;div&gt; \n \t &lt;?php echo ($bool) ? "&lt;script&gt;...&lt;/script&gt;" : "&lt;script&gt;...&lt;/script&gt;"; ?&gt; \n &lt;/div&gt; 完成了这项工作。

标签: php conditional-operator inline-scripting


【解决方案1】:

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

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

【讨论】:

  • &lt;div&gt;&lt;?php ($bool) ? echo "&lt;script&gt;...&lt;/script&gt;" : echo "&lt;script&gt;&lt;/script&gt;"; ?&gt;&lt;/div&gt; 是这样,是的
【解决方案2】:

所以你只需要添加 echo

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

【讨论】:

    【解决方案3】:

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

    但是,对于一个衬里,您可以使用 &lt;?= '...' ?&gt; 缩短 &lt;?php echo '...' ?&gt; 并将您的 HTML 包含在单引号或双引号中,具体取决于您是否已经在 HTML 语法中使用双引号。如果你愿意,你也可以逃避它们,但这会很麻烦。

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

    【讨论】:

    • 最短代码的最佳答案。谢谢!使用&lt;?= 代替&lt;?php echo 是否有任何基准(不利)优势?
    • @s3c 不,我不这么认为。我从来没有真正费心过搜索类似的东西,但这只是一个简短的语法,所以根本不应该对性能产生任何影响。
    • 那么如果 php 在基于 linux 的服务器上执行,它会经历同样的事情吗?问是因为有人告诉我,出于同样的原因,我永远不应该只使用&lt;? 而不是&lt;?php。 linux 在所有情况下都区分大小写,但这是另一个话题......
    • &lt;? 是 php 打开标签的简写,但&lt;?=&lt;? 不同。 &lt;?= 等效于 &lt;?php echo&lt;? 等效于 &lt;?php 但后者仅在 php 配置为允许时。在 php 5.4 &lt;?=short_open_tag 配置中分离出来之后。从那时起,可以使用&lt;?=,但建议不要使用&lt;?。这是better explanation
    【解决方案4】:

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

    重要提示:现在我正在使用 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 语句来实现。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-11
      • 2010-11-15
      • 2023-04-05
      • 1970-01-01
      相关资源
      最近更新 更多