【问题标题】:Conditional embed HTML between PHP code blocks?PHP代码块之间的条件嵌入HTML?
【发布时间】:2012-08-20 04:26:47
【问题描述】:

我对 PHP 还很陌生。我在 3 周前开始学习它。我在 StackOverflow、Google 或 Youtube 上找不到这个问题的答案。 PHP documentation 让我很困惑。继续回答这个问题,PHP 代码与 HTML 混合是如何工作的?

<?php if (something) { ?>
    <p>Hello</p>
<?php } ?>

p 元素只有在某些东西具有真实值时才会显示,这是怎么回事?...我确信 PHP 引擎忽略了代码块外部发生的事情(例如 )并且只解析内部发生的事情。

下面的代码被 PHP 引擎正常解析并发送到浏览器,而不影响任何 HTML 元素(即使它明显位于 2 个代码块之间)。

<?php echo $something; ?>
<p>Hello</p>
<?php echo $something; ?>

我希望我不会因为提出这个问题而被激怒,因为很多人似乎在十分之一秒内就能理解它的工作原理。

附:我很早就在聊天中问了这个问题,并认为我理解正确,但是当我去实现它时,我的想法仍然是,这究竟是如何工作的?对我来说,这似乎是某种黑客行为。

【问题讨论】:

    标签: php html


    【解决方案1】:

    现在很容易。绝对需要一个 php 教程让你开始 http://www.tizag.com/phpT/

    这是你在做什么:

    <?php 
    //Anything inside me php processes
    if($something)
    {
        echo "<p>something</p>";
    }
    //About to stop processing in php
    ?>
    <p>Anything outside of the php statement above will just be printed to the dom</p>
    

    快速提示:最好将 PHP 与 HTML 分开

    <?php if ($something) { ?>  <-- where is the other {
    <p>Hello</p>
    <?php } ?> <-- oh I see it.
    

    【讨论】:

    • 我知道这一点。我在十分之一秒内就明白了这一点。我只是在问代码块是如何工作的?我知道将 HTML 和 PHP 分开也是一种很好的做法。 =) 但我不禁对我的问题一无所知。
    • 是的,所以就像 PHP 进入待机模式一样,直到它到达另一个大括号,然后如果 $something 为真,则将评估条件并输出 p 元素。这是怎么回事,

      Hello

      是否结束;表现得像右括号并中断执行?
    • @W3Geek 在该语法中,是的,它将充当右括号。
    【解决方案2】:

    在您的第一个示例中,当且仅当 'something' 返回 true 时,&lt;p&gt;Hello&lt;/p&gt; 确实会被渲染。

    如果您使用 ?> 关闭 php 标记但执行“未关闭”,例如 if (blah) { ...,则 PHP 引擎会理解您的需求并相应地执行。

    为什么?

    PHP 引擎一直“等待”,直到使用 } 关闭执行,然后评估最终结果,浏览器继续执行以下行。

    很明显,如果你省略最后的 },你会看到一些错误,这告诉你 PHP 期望你完成你开始的事情而你没有完成

    【讨论】:

    • 确实是+1 好答案。我在想,如果你省略了结束括号,你会看到一些错误,因为 PHP 就像 WTF 伴侣?...你有一个未闭合的条件。因此,

      Hello

      endif 关闭执行?
    • PHP 中的执行从 { 开始并在 } 结束。 PHP 中的整个 if 语句是:if ($something) { //do stuff }。但是你可以使用 endif;如果你想;见stackoverflow.com/questions/564130/…
    • 最后一件事,我想出了一个经验法则。如果某些东西在条件中被评估为假,那么它就像在 PHP 引擎解析之后 HTML 代码被隐藏(不输出)一样?
    • 是的,因为 PHP 引擎再次“等待”直到语句关闭,因此在 PHP 知道真假之前什么都不会呈现。就像在纯 PHP 代码中一样
    【解决方案3】:

    php 和 html 都是内联解析的。因此,当它向下移动您的脚本时,它将在标签内运行 php 脚本,并按照它们放置的顺序显示 html。例如:

    <? $someVar = "someVar string value"; ?>
    <h1>This is a title</h1>
    <? if(1 == 1){?>
    <p>This paragraph will appear in between the header tags because 1 == 1 is true</p>
    <? } ?>
    <h3>Another header which will follow the paragraph</h3>
    <p>The value of someVar is: <?=$someVar;?></p> // <?= is a short hand for echo
    

    这将显示为:

    <h1>This is a title</h1>
    <p>This paragraph will appear in between the header tags because 1 == 1 is true</p>
    <h3>Another header which will follow the paragraph</h3>
    <p>The value of someVar is: someVar string value</p>
    

    基本上,只需将其视为服务器读取您的脚本并在运行时解析它所看到的任何内容。如果有 html,它将显示它,如果有 php 进行某种计算然后吐出 html,它将显示吐出的 html。

    【讨论】:

      【解决方案4】:

      您可以使用 php 代码块在 HTML 中的任何位置编写 php 代码

      <?php echo "whatever " ?> 
      

      <?php echo "<h1>Here everything will displayed in h1 </h1> "; ?>
      

      如果您使用控制结构(if, switch 等),那么它的行为将与所有其他语言一样,这意味着如果某些内容为 true,那么它将执行写在{ }之间的部分。

      所以如果你在if条件中写了一个未定义的变量,那么它不会执行代码块,因为未定义的变量被视为false条件。

      另外你可以通过var_dump($variable)检查任何变量值

      【讨论】:

        【解决方案5】:

        PHP 的Alternative syntax for control structures

        <!DOCTYPE html>
        ...
        <div>
        <?php if ( the_thing === true ) : ?>
            <p>The thing is true! \o/</p>
        <?php else if ( the_other_thing === true ) : ?>
            <p>The other thing is true! meh</p>
        <?php else : ?>
            <p>Nothing is true :-(</p>
        <?php endif; ?>
        </div>
        ...
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-04-18
          • 2014-12-16
          • 2017-02-09
          • 1970-01-01
          • 2012-08-30
          • 1970-01-01
          • 2012-01-21
          • 1970-01-01
          相关资源
          最近更新 更多