[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: HTML код и PHP интерпретатор
J1upuk
Смотрю курсы PHP от специалиста, там лектор говорит что теги <?php ?> созданы исключительно для нашего с вами удобства, и что весь HTML код вне PHP тегов рассматривается как содержимое конструкции echo.
Но лектор не смог ответить на вопрос обучаемого почему код:

<?php
$var = FALSE;
if($var)
?>
<h1>Заголовок</h1>

не смотря на то что в if - FALSE, выводит нам заголовок, хотя по словам лектора - <h1>Заголовок</h1> рассматривается интерпретатором как echo '<h1>Заголовок</h1>';, а следовательно это инструкция относящаяся к if.
Я было сделал вывод что лектор ошибается, и HTML код вообще не обрабатывается интерпретатором, а отдаётся браузеру как есть. Но вспомнил что код:

<?php
$var = FALSE;
if($var){
?>
<h1>Заголовок</h1>
<?php
}

Заголовок не выводит, следовательно HTML рассматривается как инструкция, которая относится к оператору if!
Уважаемые знатоки матчасти, помогите разобраться, как всётаки всё это работает!
andrey888
Не знаток матчасти. Но исходя из простой логики.

при написании сокращенной записи if без фигурных скобок php отнесит к выполнению или невыполнению условия if только одну следующую за if строку. ( либо одну операцию )

в коде

<?php
$var = FALSE;
if($var)
?>
<h1>Заголовок</h1>


после уловия if для php больше нет строк (заданий, операций)

заключая html в фигурные скобки ты относит HTML к операции которую пхп выполнит при условии.

_____________
Прогноз на следующие 5 лет : Россия, Китай - две величайшие державы.
США в Ж*пе. Справедливость восторжествует. )
killer8080
Цитата (J1upuk @ 20.08.2015 - 18:49)
хотя по словам лектора - <h1>Заголовок</h1> рассматривается интерпретатором как echo '<h1>Заголовок</h1>';, а следовательно это инструкция относящаяся к if.

нет не так, код
<?php
$var = FALSE;
if($var)
?>
<h1>Заголовок</h1>

не эквивалентен
<?php
$var = FALSE;
if($var)
echo '<h1>Заголовок</h1>';

он эквивалентен
<?php
$var = FALSE;
if($var);
echo '<h1>Заголовок</h1>';

потому что
http://php.net/manual/ru/language.basic-sy...-separation.php
Цитата
Разделение инструкций

Как в C или Perl, PHP требует окончания инструкций точкой запятой в конце каждой инструкции. Закрывающий тег блока PHP-кода автоматически применяет точку с запятой; т.е. нет необходимости ставить точку с запятой в конце последней строки блока с PHP-кодом. Закрывающий тег блока "поглотит" немедленно следующий за ним переход на новую строку, если таковой будет обнаружен.
J1upuk
Спасибо большое за разъяснение, хотел было поспорить, но следующий код сработал без синтаксической ошибки, значит вы точно правы :)

<?php
$var = TRUE;
if($var)
{;
echo '<h1>Заголовок</h1>';
}
killer8080
J1upuk
точка с запятой это конец инструкции, если перед ней не было инструкции, парсер посчитает её пустой операцией и проигнорирует.
icedfox
J1upuk, начните писать без сокращенных кодов, допустите меньше ошибок, которые будет сложно отловить.
$var = TRUE;
if ($var) {
echo '<h1>Заголовок</h1>';
} else {
echo '<h1>Чет не срослось</h1>';
}

И читаемо и шансов на ошибку меньше ;)

П.С. Сам именно так и пишу, тернарные операторы не предлагаю, хотя в ряде случаев весьма удобно к использованию.
AllesKlar
Цитата (icedfox @ 21.08.2015 - 06:47)
J1upuk, начните писать без сокращенных кодов, допустите меньше ошибок, которые будет сложно отловить.
$var = TRUE;
if ($var) {
echo '<h1>Заголовок</h1>';
} else {
echo '<h1>Чет не срослось</h1>';
}

И читаемо и шансов на ошибку меньше  ;)

П.С. Сам именно так и пишу, тернарные операторы не предлагаю, хотя в ряде случаев весьма удобно к использованию.

Это с возрастом (опытом) приходит :)
Сначала люто говнокодишь.
Потом, смотришь, как круто кто-то монздрячит в одну строку 100500 операторов, и начинаешь тоже писать круто.
Потом, однажды, поподаешь в команду и получаешь там по ушам, за то, что никто, кроме наркоманов, твой код читать не может (хотя и наркоманы его не читают, распечатывают и курят просто)

И вот тогдааа... ты открываешь прописи и вспоминаешь, как это было: "Ма-ма мы-ла ра-му..." и радуешься лаконичности кода.

_____________
[продано копирайтерам]
killer8080
Цитата (icedfox @ 21.08.2015 - 07:47)
J1upuk, начните писать без сокращенных кодов, допустите меньше ошибок, которые будет сложно отловить.

предлагаешь весь html через echo выводить? biggrin.gif
icedfox
Цитата (killer8080 @ 21.08.2015 - 14:11)
предлагаешь весь html через echo выводить?

Нет конечно, у меня так вообще не бывает. Для ТС показан способ по его вопросу, если затрагивать еще и более грамотный вывод, то код будет сложнее и больше. Тогда ТС бросит сразу изучение пыха и пойдет в грузчики. А мне это не выгодно, хочу быть единственным грузчиком biggrin.gif
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.