По идее блок html должен попадать под условие if и выполняться - if true. В данном случае - false, но html возвращает.
<?php
$shop = "open";
if ($shop == "close")
?>
<h3>Этот html-код попадает в блок выполнения php - кода (if true)</h3>
<?php
echo "Покупаю хлеб";
echo "Иду домой";
?>
писать надо так:
<?php
$shop = "open";
if ($shop == "close"):
?>
<h3>Этот html-код попадает в блок выполнения php - кода (if true)</h3>
<?php
endif;
echo "Покупаю хлеб";
echo "Иду домой";
?>
это Альтернативный синтаксис управляющих структур
или так:
<?php
$shop = "open";
if ($shop == "close") {
?>
<h3>Этот html-код попадает в блок выполнения php - кода (if true)</h3>
<?php
}
echo "Покупаю хлеб";
echo "Иду домой";
?>
по обычному стандарту расстановки скобок в управляющей конструкции.
строго говоря, этот пост не объясняет, почему не работает. – @Ипатьев
Собсн, я этот момент упустил. Но это уже можно посмотреть в соседних ответах участников @Ипатев и @vp_arth
Не думаю, что они их удалят))
Конструкция ?> предполагает автоматическую подстановку точки с запятой.
Ваш код аналогичен следующему:
<?php
$shop = "open";
if ($shop == "close")
; // <- Условие распространяется только на этот пустой оператор
echo '<h3>Этот html-код попадает в блок выполнения php - кода (if true)</h3>';
echo "Покупаю хлеб";
echo "Иду домой";
Вам следует явно определить область действия оператора if:
<?if ($cond) {?>Text<?}?><?if($cond):?>Text<?endif?>Я думаю, надо все-таки явно написать, почему строчка выводится.
Без определения области действия, операторы РНР действуют только на следующий оператор. То есть,
if (false) echo 1;
echo 2;
разумеется, этот код выведет только 2.
Если же нам надо, чтобы в область действия попало больше операторов, ее надо обозначить явно.
if (false) {
echo 1;
echo 2;
}
Этот код не выведет ничего.
Но остается вопрос, почему РНР не воспринял оператор вывода HTML, который, вроде бы, идет самым первым после условия. Ответ на этот вопрос дал vp_arth - потому что закрывающий тег РНР действует так же и как ограничитель оператора. То есть в итоге у автора получилось условие, действующее на пустой оператор:
if ($shop == "close") ;
# ^ оператор видишь? И я нет. А он есть!
и дальнейший код уже под его действие не попал.
Сборка персонального компьютера от Artline: умный выбор для современных пользователей