Вывод HTML с эхом считается плохой практикой в ​​PHP?

В PHP я использую оператор if чтобы определить, вошел ли пользователь в систему или нет, и в зависимости от результата отображает главное меню (если оно зарегистрировано) или сообщение «вам нужно войти», если нет. Я делаю это так:

 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html;charset=utf-8" /> <link rel="stylesheet" href="style.css" type="text/css" /> <title>Home</title> </head> <body> <div id="header"> <a href="index.php"><img src="wtcdblogo.png" alt="WTC DB logo" /></a> </div> <?php if($_SESSION['loggedIn'] == 1) { echo "<div id='main'>MAIN MENU stuff goes here</div>"; } else { echo "<div id='main'>Please login...</div>"; } ?> </body> </html> 

Как вы можете видеть, код, отображающий главное меню или сообщение «пожалуйста, войдите», генерируется echo . Это плохая практика, возможно, есть лучший способ?

Кстати, я вырезал большую часть HTML из echo в моем фрагменте выше. Главное меню составлено из списка, но я не беспокоился о том, что, поскольку это не имеет отношения к вопросу, я думаю.

Solutions Collecting From Web of "Вывод HTML с эхом считается плохой практикой в ​​PHP?"

Я считаю, что это плохая практика. Не уверен, что кто-то еще думает. С одной стороны, это выглядит ужасно в текстовых редакторах с подсветкой синтаксиса, тогда вам нужно беспокоиться об экранированных строках и т. Д.

Вот как я это делаю:

  <div> <? if ($_SESSION['loggedIn'] === 1): ?> <div id="main">Main Menu stuff goes here</div> <? else: ?> <div id="main">Please log in...</div> <? endif ?> </div> 

Вы можете прыгать с PHP-тегов и использовать HTML-код прямо. Есть плюсы и минусы делать это таким образом. Мне нравится это лучше, чем эхо. Другие варианты состоят в том, чтобы сделать новые взгляды в этих областях на основе результатов операторов if. Много возможностей, но выше всего лишь один из способов сделать это немного чище и (я думаю) лучше.

Нет ничего плохого в том, что echo для html используется при умеренности. Просто не используйте его для длинных многострочных блоков. Вы всегда будете в конечном итоге с некоторой уродливой конструкцией, требующей экранирования и еще чего-то, что делает вещи еще более уродливыми для чтения.

Если выводимый html-файл является «статическим» (никаких переменных для вставки), тогда рассмотрите возможность выхода из режима php ( ?> ) И просто сброс html как есть. Если вам нужно вставить переменные, тогда рассмотрите использование HEREDOC , которые действуют как строка с двумя кавычками, но без кавычек.

Почему бы не написать так?

 <?php if($_SESSION['loggedIn'] == 1): ?> <div id='main'>MAIN MENU stuff goes here</div> <?php else: ?> <div id='main'>Please login...</div> <?php endif; ?> 

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

 <?php if (condition) { ?> <div> some stuff </div> <?php } ?> 

Красота PHP заключается в том, что вы можете это сделать.

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

Существует много существующих решений, обычно включающих в себя какие-то шаблоны макета, которые загружаются кодом.

Нет истинной «лучшей практики», хотя некоторые утверждают, что предпочитают то или иное. В идеале, если вы отделяете HTML от PHP, вы изолируете бэкэнд приложения от внешнего интерфейса, что упрощает его чтение, изменение и поддержку.

Что касается вашего кода, я могу изменить его, чтобы он был более кратким (в зависимости от того, что вы подразумеваете под «MAIN MENU stuff …», я бы пересмотрел это редактирование):

 <div id="main"> <?= ($_SESSION['loggedIn'] == 1) ? 'MAIN MENU stuff goes here' : 'Please login...'; ?> </div> 

Некоторые считают, что это плохая практика, это правда. Мне нравится не использовать эхо. Если вы сделаете это так, тем более ясны редакторы, такие как Dreamweaver, что вы хотите и получите все преимущества автозаполнения.

 <?php if ($loggedin) { ?> Thank you for being logged in. <hr> <?php } else { ?> Please <a href='login.php'>login</a> <?php } ?>