何时可以混合HTML和PHP有什么限制?

时间:2014-10-17 04:51:10

标签: php html mixing

我很惊讶地发现你可以将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 ?>就像在字符串中包含变量一样?

2 个答案:

答案 0 :(得分:1)

我似乎无法找到任何与块内PHP标记退出相关的文档。但是,实际上只有少数地方可以使用HTML。

  1. 正常用法

    <?php
    
        php_related_code();
    
    ?>
    
    //html/css/js/etc
    
  2. 在块内,例如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();
    
  3. 您可以认为?>stuff<?php类似于PHP中的echo或print命令,因为您可以在可以回显的相同位置转义为HTML。所以你可以在主脚本中回显for for循环,你可以在函数中回显。但是你不能在数组中回显,例如:

    <?php
    
    $array = array(echo "here"); //not allowed
    $array = array(?>here<?php); //also not allowed
    

    所以你可以想到逃避它可以告诉你哪里你可以使用它的回声,但当你想到你不能做同样的事情它的作用

    它们的行为不同,并且由PHP处理也不同。但您的问题只是询问任何限制,因此我不会讨论?><?phpecho之间的区别。

    我忘了提及,如果启用此功能,<?=$variable?>只是<?php echo $variable; ?>的短标记。

答案 1 :(得分:0)

这称为意大利面条代码。不要使用它。

如果你真的想分开代码,逻辑和标记开始使用MVC; YII很棒。

http://www.yiiframework.com/

同时检查一下:https://www.youtube.com/watch?v=mhwfFgSzg7U