Я был удивлен, обнаружив, что вы можете вырваться из функции 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 ?>
это как включить переменную в строку?
Кажется, я не могу найти какую-либо документацию, касающуюся выхода тегов PHP внутри блоков. Тем не менее, есть только несколько мест, где можно перейти в HTML.
Нормальное использование
<?php
php_related_code();
?>
//html/css/js/etc
Внутри блоков, таких как 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; ?>
если у вас включена эта функция.
Это называется кодом спагетти. НЕ ИСПОЛЬЗУЙТЕ ЕГО.
Если вы действительно хотите разделить код, начните с использования MVC; YII отлично.
Также проверьте это: https://www.youtube.com/watch?v=mhwfFgSzg7U