Есть ли какие-то ограничения на то, когда вы можете смешивать HTML и PHP?

Я был удивлен, обнаружив, что вы можете вырваться из функции 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, как это, но я не могу использовать ООП / шаблонизацию (по причинам, которые я не буду здесь вдаваться), и мне нравится видеть как можно больше необработанного HTML.

Кроме того, я не совсем понимаю семантику того, как короткий открывающий / закрывающий тег выше (вывод $adjective) работает в сочетании с окружающим кодом. Обрабатывает ли PHP просто необработанный HTML, как будто echo заявление? А потом <?= $adjective ?> это как включить переменную в строку?

0

Решение

Кажется, я не могу найти какую-либо документацию, касающуюся выхода тегов PHP внутри блоков. Тем не менее, есть только несколько мест, где можно перейти в HTML.

  1. Нормальное использование

    <?php
    
    php_related_code();
    
    ?>
    
    //html/css/js/etc
    
  2. Внутри блоков, таких как while, for, функции и т. Д.

    <?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 похож на команду echo или print, найденную в PHP, потому что вы можете перейти в HTML в тех же местах, что и эхо. Таким образом, вы можете использовать эхо внутри основного скрипта, в циклах for, и вы можете эхо в функциях. Но вы не можете отобразить в массиве, например:

<?php

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

Таким образом, вы можете думать о том, чтобы избежать того же, что и эхо, в котором оно может сказать вам где вы можете использовать его, но вы не можете сделать то же самое, когда вы думаете о какие оно делает.

Они действуют по-разному и по-разному обрабатываются PHP. Но ваш вопрос касается только каких-либо ограничений, поэтому я не буду вдаваться в различия между ?><?php а также echo,

Я забыл упомянуть, <?=$variable?> это просто короткий тег для <?php echo $variable; ?> если у вас включена эта функция.

1

Другие решения

Это называется кодом спагетти. НЕ ИСПОЛЬЗУЙТЕ ЕГО.

Если вы действительно хотите разделить код, начните с использования MVC; YII отлично.

http://www.yiiframework.com/

Также проверьте это: https://www.youtube.com/watch?v=mhwfFgSzg7U

0

По вопросам рекламы [email protected]