Почему возвращает html, который вне блока php?

239
25 марта 2017, 02:10

По идее блок html должен попадать под условие if и выполняться - if true. В данном случае - false, но html возвращает.

<?php
    $shop  = "open";
    if ($shop == "close") 
?>
<h3>Этот html-код попадает в блок выполнения php - кода (if true)</h3>
<?php
    echo "Покупаю хлеб";
    echo "Иду домой";
?>
Answer 1

писать надо так:

<?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

Не думаю, что они их удалят))

Answer 2

Конструкция ?> предполагает автоматическую подстановку точки с запятой.
Ваш код аналогичен следующему:

<?php
    $shop  = "open";
    if ($shop == "close") 
    ; // <- Условие распространяется только на этот пустой оператор
    echo '<h3>Этот html-код попадает в блок выполнения php - кода (if true)</h3>';
    echo "Покупаю хлеб";
    echo "Иду домой";

Вам следует явно определить область действия оператора if:

  • С помощью фигурных скобок: <?if ($cond) {?>Text<?}?>
  • С помощью альтернативного синтаксиса: <?if($cond):?>Text<?endif?>
Answer 3

Я думаю, надо все-таки явно написать, почему строчка выводится.

Без определения области действия, операторы РНР действуют только на следующий оператор. То есть,

if (false) echo 1;
echo 2;

разумеется, этот код выведет только 2.
Если же нам надо, чтобы в область действия попало больше операторов, ее надо обозначить явно.

if (false) {
    echo 1;
    echo 2;
}

Этот код не выведет ничего.

Но остается вопрос, почему РНР не воспринял оператор вывода HTML, который, вроде бы, идет самым первым после условия. Ответ на этот вопрос дал vp_arth - потому что закрывающий тег РНР действует так же и как ограничитель оператора. То есть в итоге у автора получилось условие, действующее на пустой оператор:

if ($shop == "close") ;
#                    ^ оператор видишь? И я нет. А он есть!

и дальнейший код уже под его действие не попал.

READ ALSO
ошибка в opencart в чем может быть дело?

ошибка в opencart в чем может быть дело?

PHP Fatal error: require_once() [functionrequire]: Failed opening required '/home/a/set/public_html/system/startup

264
Вывод данных из БД используя AJAX

Вывод данных из БД используя AJAX

Доброго времени сутокСкажу сразу, что новичок в AJAX

304
HTML5+CSS+PHP форма

HTML5+CSS+PHP форма

У меня есть фото с работами и реализовано это вот так:

228
Сложение двух двоичных чисел

Сложение двух двоичных чисел

Не могли бы вы мне подсказать код сложения двух двуичных чисел, но без перевода их в десятичную систему ?

331