在PHP代码块之间有条件地嵌入HTML?

在PHP代码块之间有条件地嵌入HTML?,php,html,Php,Html,我对PHP相当陌生。我三周前就开始学了。我在StackOverflow、Google或Youtube上都找不到这个问题的答案。这一点让我很困惑。为了回答这个问题,PHP代码如何与HTML混合使用 <?php if (something) { ?> <p>Hello</p> <?php } ?> 你好 p元素只有在某个元素具有真实值时才会显示,这是怎么回事?。。。我确信PHP引擎忽略了代码块外部发生的事情(例如),只解析内部发生的事情

我对PHP相当陌生。我三周前就开始学了。我在StackOverflow、Google或Youtube上都找不到这个问题的答案。这一点让我很困惑。为了回答这个问题,PHP代码如何与HTML混合使用

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

你好

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

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


你好

我希望我不会因为问这个问题而被激怒,因为很多人似乎在十分之一秒内就明白了它是如何工作的


另外,我很早就在聊天中问过这个问题,我认为我理解正确,但当我去实施它时,我的想法仍然是,这到底是如何工作的?对我来说,这似乎是某种黑客行为。

现在很简单。肯定需要一个php教程让你开始

以下是您的工作:

<?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语句之外的任何内容都将被打印到dom中

快速说明:将PHP与HTML分开是一种很好的做法

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

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

这是一个标题
此段落将出现在标题标记之间,因为1==1为真

段落后面的另一个标题
someVar的值是:

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

<?php echo "whatever " ?> 


如果您使用控制结构(if,switch等),那么它的行为将与所有其他语言一样,也就是说,如果某个东西是true,那么它将执行在
{}
之间编写的部分

因此,如果在if条件中写入未定义的变量,那么它将不会执行的代码块,因为未定义的变量被视为false条件


另外,您可以通过
var\u dump($variable)
检查任何变量值。在您的第一个示例中,当且仅当“某物”返回true时,才会呈现
Hello

如果您用?>关闭一个php标记,但有一个“未关闭”的执行,比如
If(blah){…
,php引擎会理解您的愿望并相应地执行

为什么?

PHP引擎一直在“等待”,直到执行以}结束,然后计算最终结果,浏览器继续执行下面的行

显然,如果您省略了final},您将看到一些错误,这表明PHP希望您完成开始的工作,而您没有

PHP的

...
事情是真的\o/

另一件事是真的!meh

没有什么是真的:-(

...
我知道这一点。我在十分之一秒内就理解了这一点。我只是问它是如何通过代码块工作的?我知道分离HTML和PHP也是一种很好的做法。=)但我忍不住对我的问题仍耿耿于怀。是的,就像PHP进入待机模式,直到它到达另一个大括号,然后如果$something是truthy,将计算条件,并输出p元素。这是怎么回事,Hello

endif;像右大括号一样操作并中断执行?@W3Geek在这种语法中,是的,它将充当右大括号。+1确实是一个很好的答案。我在想,如果你省略了结尾括号,你会看到一些错误,因为PHP就像WTF mate?。。。您有一个未关闭的条件。因此,在PHP中,Hello

endif关闭执行?执行从{开始,在}结束。PHP中的整个if语句是:if($something){//dostuff}。但是你可以使用endif;如果你愿意;看最后一件事,我想出了一个经验法则。如果某个内容在条件中的计算结果为false,那么它就像PHP引擎解析HTML代码后隐藏(而不是输出)一样?是的,因为PHP引擎再次“等待”语句关闭,因此在PHP知道true或false之前不会呈现任何内容。就像只在PHP代码中一样
<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>
<?php echo "whatever " ?> 
<?php echo "<h1>Here everything will displayed in h1 </h1> "; ?>
<!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>
...