我很惊讶地发现你可以将PHP函数分解为原始HTML并返回。我知道你可以用循环和条件做这种事情,但这对我来说是一个惊喜。这是一次意外还是这种定义明确的行为? (我无法在手册中找到对功能案例的任何明确讨论。)
[注意:下面的代码没有给出一个很好的例子,说明我何时会使用这种行为,但为了演示目的,我保持简单。]
<?php
$i = 0;
while($i++ < 3) {
?><p>I am in a while loop.</p><?php
}
// this part surprised me
function actSkeptical($adjective) {
?><p>Is it <?= $adjective ?> that this works?.</p><?php
}
actSkeptical("weird");
?>
输出:
I am in a while loop.
I am in a while loop.
I am in a while loop.
Is it weird that this works?
我知道有些人绝对讨厌像这样混合使用PHP和HTML,但是我不能进行OOP /模板化(因为我不会进入这里),我确实喜欢看到原始HTML和可能的。
另外,我并不完全理解上面的短打开/关闭标记(输出$adjective
)与周围代码一起工作的语义。 PHP只是将原始HTML视为echo
语句吗?然后<?= $adjective ?>
就像在字符串中包含变量一样?
答案 0 :(得分:1)
我似乎无法找到任何与块内PHP标记退出相关的文档。但是,实际上只有少数地方可以使用HTML。
正常用法
<?php
php_related_code();
?>
//html/css/js/etc
在块内,例如while,for,functions等
<?php
for ($i = 0; $i < 5; $i++) {
?>
hello world
<?php
}
$i = 5;
while ($i-- > 0) {
?> hello there <?php
}
function myFunc() {
?>
hello universe
<?php
}
myFunc();
您可以认为?>stuff<?php
类似于PHP中的echo或print命令,因为您可以在可以回显的相同位置转义为HTML。所以你可以在主脚本中回显for for循环,你可以在函数中回显。但是你不能在数组中回显,例如:
<?php
$array = array(echo "here"); //not allowed
$array = array(?>here<?php); //also not allowed
所以你可以想到逃避它可以告诉你哪里你可以使用它的回声,但当你想到你不能做同样的事情它的作用。
它们的行为不同,并且由PHP处理也不同。但您的问题只是询问任何限制,因此我不会讨论?><?php
和echo
之间的区别。
我忘了提及,如果启用此功能,<?=$variable?>
只是<?php echo $variable; ?>
的短标记。
答案 1 :(得分:0)
这称为意大利面条代码。不要使用它。
如果你真的想分开代码,逻辑和标记开始使用MVC; YII很棒。